集合
集合类的分类
* (一)List 结构集合类
* ArrayList LinkedList Vector Stack
* (二)Map 结构集合类
* HashMap HashTable
* (三)Set 结构集合类
* HashSet TreeSet
* (四)Queue 结构集合类和 Queue接口
一、ArrayList
1、什么是ArrayList
ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:
- 动态的增加和减少元素
- 实现了ICollection和IList接口
- 灵活的设置数组的大小
大家知道,数组是静态的,数组被初始化之后,数组长度就不能再改变了。ArrayList是可以动态改变大小的。那么,什么时候使用Array(数组),什么时候使用ArrayList?答案是:当我们不知道到底有多少个数据元素的时候,就可使用ArrayList;如果知道数据集合有多少个元素,就用数组。
2、初始化ArrayList的两种方法
方式一:
ArrayList<String> list = new ArrayList<String>();
String str01 = String("str01");
String str02 = String("str02");
list.add(str01);
list.add(str02);
方式二:
ArrayList<String> list = new ArrayList<String>(){{add("str01"); add("str02");}};
3.ArrayList常用方法
ArrayList<String> list = new ArrayList<String>();
增加元素到链表中
list.add("Item1");
从链表中删除元素
list.remove("Item3");
获取链表中的元素
boolean element = list.contains("Item5"); System.out.println("Checking if the arraylist contains the object Item5: " + element);
String item = list.get(0); System.out.println("The item is the index 0 is: " + item);
修改某个元素
list.set(1, "NewItem"); System.out.println("The arraylist after the replacement is: " + list);
搜索元素
System.out.println("Retrieving items with loop using index and size list"); for (int i = 0; i < list.size(); i++) { System.out.println("Index: " + i + " - Item: " + list.get(i)); }
检查链表是否为空
boolean check = list.isEmpty();
System.out.println("Checking if the arraylist is empty: " + check);
获取链表大小
int size = list.size(); System.out.println("The size of the list is: " + size);
public class Xs { private String xingming; private int xuehao; private int chengji; Xs(String xingming,int xuehao ,int chengji){ this.xingming=xingming; this.xuehao=xuehao; this.chengji=chengji; } public String getXingming(){ return xingming; } public int getXuehao(){ return xuehao; } public int chengji(){ return chengji; } } public class Collection_2 { public static void main(String[] args){ ArrayList aa1=new ArrayList(); System.out.println("大小为"+aa1.size()); Xs xs1=new Xs("悟空",15,90); Xs xs2=new Xs("八戒",13,70); Xs xs3=new Xs("沙僧",15,90); Xs xs4=new Xs("小白龙",20,80); aa1.add(xs1); aa1.add(xs2); aa1.add(xs3); System.out.println("大小为"+aa1.size()); //aa1.remove(1); /*for(int i=0;i<aa1.size();i++){ Xs tv=(Xs)aa1.get(i); System.out.println("第"+(i+1)+"个学生姓名是"+tv.getXingming()); }*/ aa1.add(1,xs4); for(int i=0;i<aa1.size();i++){ Xs tv=(Xs)aa1.get(i); System.out.println("第"+(i+1)+"个学生姓名是"+tv.getXingming()); } } }
二、LinkedList
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.
LinkedList的构造函数如下
1. public LinkedList(): ——生成空的链表
2. public LinkedList(Collection col): 复制构造函数
public class Collection_LinkedList { public static void main(String[] args) { LinkedList bb=new LinkedList(); Sp sp1=new Sp("001","话梅",5f); Sp sp2=new Sp("002","薯片",8f); bb.addFirst(sp1);//后进先出。先放进去的在最里面,后放进去的,在最外面 bb.addFirst(sp2);// for(int i=0;i<bb.size();i++) { //System.out.println(((Sp)bb.get(i)).getMingcheng()); //System.out.println(((Sp)bb.getFirst()).getMingcheng()); //System.out.println(((Sp)bb.getLast()).getMingcheng()); } bb.addLast(sp1);//先放进去的,先出去 bb.addLast(sp2); for(int i=0;i<bb.size();i++) { //System.out.println(((Sp)bb.get(i)).getMingcheng()); //System.out.println(((Sp)bb.getFirst()).getMingcheng()); //System.out.println(((Sp)bb.getLast()).getMingcheng()); } } }
二、Vector和Stack
public class Collection_Vector { public static void main(String[] args) { Vector cc=new Vector(); Sp sp1=new Sp("001","巧克力",20f); Sp sp2=new Sp("002","果脯",10f); cc.add(sp1); cc.add(sp2); for(int i=0;i<cc.size();i++) { System.out.println(((Sp)cc.get(i)).getMingcheng()); } /*Stack dd=new Stack(); Sp sp3=new Sp("003","巧克力3",20f); Sp sp4=new Sp("004","果脯4",10f); dd.add(sp3); dd.add(sp4); for(int i=0;i<dd.size();i++) { System.out.println(((Sp)dd.get(i)).getMingcheng()); }*/ } }
三、HashMap
public class Collection_HashMap { public static void main(String[] args) { HashMap ee=new HashMap(); Sp sp1=new Sp("001","香肠",20); Sp sp2=new Sp("002","果脯",20); //Sp sp3=new Sp("003","面包",20); ee.put("001", sp1); ee.put("002", sp2); //ee.put("003", sp3); /*if(ee.containsKey("002")) { System.out.println("该食品信息为:"); Sp sp=(Sp)ee.get("002"); System.out.println(sp.getMingcheng()); System.out.println(sp.getJiage()); } else { System.out.println("对不起,没有该食品!"); }*/ /*for(int i=0;i<ee.size();i++) { ee.get(); }*/ //遍历不可以用for循环 Iterator it=ee.keySet().iterator(); while(it.hasNext()) { String key=it.next().toString(); Sp sp=(Sp)ee.get(key); System.out.println("食品名称:"+sp.getMingcheng()); System.out.println("食品名称:"+sp.getJiage()+"元"); } } }
四、集合类的比较
ArrayList 和Vector 的区别
ArrayList 和 HashMap 都是线程异步的,所以他们的特点是效率高但是安全性低
Vector 和 HashMap 都是 线程同步的,所以他们的特点 都是 效率低但是 安全性低
五、泛型
package Collection_Example; import java.util.ArrayList; public class Collection_fanxin { public void main(String[] args) { ArrayList<Ls> ff=new ArrayList<Ls>();//通过泛型将类型定下来 Ls ls1=new Ls("薯片",5f); ff.add(ls1); Ls cls=(Ls)ff.get(0); // Yl hyl=(Yl)ff.get(0); } class Ls { private String mingcheng; private float jiage; Ls(String mingcheng,float jiage) { this.mingcheng=mingcheng; this.jiage=jiage; } } class Yl { private String mingcheng; private float jiage; private String yanse; Yl(String mingcheng,float jiage,String yanse) { this.mingcheng=mingcheng; this.jiage=jiage; this.yanse=yanse; } } }
六、反射机制
package Collection_Example; import java.lang.reflect.Method; public class Collection_fanshejizhi { public static void main(String[] args) { //Bh<String> hw1=new Bh<String>("货物1"); //Bh<Integer> hw2=new Bh<Integer>(123); Bh<Wj> hw3=new Bh<Wj>(new Wj()); } } class Wj { public void wan() { System.out.println("正在玩儿游戏!" ); } public int jiafa(int a,int b) { return a+b; } } class Bh<L> { private L l; Bh(L l) { this.l=l; } public void lxmc() { System.out.println("类型是"+l.getClass().getName()); Method []a=l.getClass().getDeclaredMethods(); /* for(int i=0;i<a.length;i++) { System.out.println("函数名为"+a[i].getName()); } * * */ } }