第十九章 集合
一、数组弊端:
数组长度是固定的,无法继续添加元素。
二、什么是集合:
Java提供一个集合类,它的长度是可以改变的,能储存任意的对象,长度随着元素的增加而增加。
三、集合和数组的区别:
1.数组:能存放引用数据类型和基本数据类型。
2.集合:只能存放引用数据类型(对象),即使存放基本数据类型,也会自动帮你装箱,把基本数据类型转换为引用数据类型。
3.数组长度是固定的,集合长度能够改变。
四、什么时候用数组,什么时候用集合?
1.如果元素个数固定,用数组
2.对元素进行增删改查操作时,使用集合。
五、集合类:
1、创建一个集合:
1 Collection c = new ArrayList();
2、向集合内添加元素:
1 Collection c = new ArrayList();
2 boolean b1 = c.add("abc");
3 boolean b2 = c.add(10);
4 boolean b3 = c.add(true);
3、删除集合内指定元素:
1 ArrayList c2 = new ArrayList();
2 c2.add("a");
3 c2.add("b");
4 c2.add("c");
5 System.out.println(c2);
6
7 //从集合中移除指定元素
8 c2.remove("b");
9 System.out.println(c2);
4、判断一个集合是否为空:
1 //判断一个集合是否为空
2 System.out.println(c2.isEmpty());
5、获取集合的长度:
1 // 获取集合当中的长度
2 System.out.println(c2.size());
7、清空集合内的所有元素:
1 // 清空集合内所有元素
2 c2.clear();
3 System.out.println(c2);
8、合并两个集合:
1 c1.addAll(c2);
9、从c1中删除两个集合的交集:
1 c1.removeAll(c2);
10、判断c1中是否完全包含c2:
1 //boolean res = c1.containsAll(c2);
2 //System.out.println(res);
11、取交集,将交集的值赋值给c1:
1 boolean b1 = c1.retainAll(c2);
2 System.out.println(b1);
3 System.out.println(c1);
12、通过数组遍历集合:
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
//将集合转化为数组,所有元素提升为Object类型
Object []arr = c.toArray();
for(int i = 0;i<arr.lengthi;i++){
System.out.println(arr[i]);
}
六、ArrayList集合:
1、使用迭代器遍历集合:
1 List list = new ArrayList();
2 list.add("a");
3 list.add("2");
4 list.add("c");
5 list.add("d");
6
7 //1.遍历集合
8 Iterator it = list.iterator();
9 while(it.hasNext()){
10 System.out.pringln(it.next());
11 }
12 }
2、并发修改异常:
在迭代集合过程中,是不允许修改集合结构的,比如添加,删除元素(个数的改变),如果改变了,就会发生并发修改异常。
3、List 当中特有的迭代器,在删除修改时,不会造成并发修改异常。
1 ListIterator it = list.listIterator();
4、去除List集合中的重复元素:
1 static ArrayList getSingleEle(ArrayList list) {
2 // 1.创建一个新的集合
3 ArrayList newa1 = new ArrayList();
4 // 2.将一次取出每一个元素
5 Iterator itr = list.iterator();
6 while (itr.hasNext()) {
7 Object obj = itr.next();
8 // 3.每次取出元素都会判断新集合中已经有该元素
9 // 4.如果是已有元素,不把元素存放到新集合中
10 if (!newa1.contains(obj)) {
11 newa1.add(obj);
12 }
13 }
14 //System.out.println(newa1);
15 return newa1;
16 }
5、去除集合内重复的元素为对象时,重写equals方法:
1 class Student {
2 String name;
3 int age;
4
5 Student(String name, int age) {
6 this.name = name;
7 this.age = age;
8 }
9
10 @Override
11 public String toString() {
12 return "Student [name=" + name + ", age=" + age + "]";
13 }
14
15 // 做对象的比较,不想让其对比地址,必须要覆盖equals 根据自己的需求来定义什么时候相等(也可以通过快速生成)
16 public boolean equals(Object obj) {
17 Student stu = (Student) obj;
18 return this.name.equals(stu.name) && this.age == stu.age;
19 }
20
21 }
6、LinkedList集合:
1 LinkedList list = new LinkedList();
2 list.add("a");
3 list.add("b");
4 list.add("c");
5 System.out.println(list);
7、Vector集合:
1 public static void main(String[] args) {
2 //Vector 只是在内部进行了加锁,更加的安全
3 Vector v = new Vector();
4 v.add("a");
5 v.add("b");
6 v.add("c");
7 System.out.println(v);
8
9 }
10
11 }