集合概述
什么是集合?有什么用?
数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它类型的数据。
集合为什么说在开发中使用较多?
集合是一个容器,是一个载体,可以一次容纳多个对象。在实际开发中,假设连接数据库,数据库当中有10条记录,那么假设把这10条记录查询出来,在java程序中会将10条数据封装成10个java对象,然后将10个java对象放到某一个集合当中,将集合传到前端,然后遍历集合,将一个数据一个数据展现出来。
集合不能直接存储基本数据类型,另外集合也不能直接存储java对象
集合当中存储的都是java对象的内存地址。(或者说集合中存储的是引用。)
list.add(100); //自动装箱Integer
注意:
集合在java中本身是一个容器,是一个对象。
集合中任何时候存储的都是“引用”。
在java中每一个不同的集合,底层会对应不同的数据结构。
往不同的集合中存储元素,等于将数据放到了不同的数据结构当中。
new ArrayList(); 创建一个集合,底层是数组。
new LinkedList(); 创建一个集合对象,底层是链表。
new TreeSet(); 创建一个集合对象,底层是二叉树。
…..
集合在java JDK中哪个包下?
java.util.*;
在java中集合分为两大类:
一类是单个方式存储元素:
单个方式存储元素,这一类集合中超级父接口:java.util.Collection;
一类是以键值对儿的方式存储元素:
以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map;
java中的集合继承结构图文详解
集合继承结构图-Collection
集合继承结构图-Map
Collection接口中的常用方法
1、Collection中能存放什么元素?
没有使用“泛型”之前,Collection中可以存储Object的所有子类型。
使用了“泛型”之后,Collection中只能存储某个具体的类型。
集合后期我们会学习“泛型”语法。目前先不用管。Collection中什么都能存,
只要是Object的子类型就行。(集合中不能直接存储基本数据类型,也不能存
java对象,只是存储java对象的内存地址。)
2、Collection中的常用方法
boolean add(Object e) 向集合中添加元素
int size() 获取集合中元素的个数
void clear() 清空集合
boolean contains(Object o) 判断当前集合中是否包含元素o,包含返回true,不包含返回false
boolean remove(Object o) 删除集合中的某个元素。
boolean isEmpty() 判断该集合中元素的个数是否为0
Object[] toArray() 调用这个方法可以把集合转换成数组。【作为了解,使用不多。】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| import java.util.ArrayList; import java.util.Collection;
public class CollectionTest01 { public static void main(String[] args) { Collection c = new ArrayList(); c.add(1200); c.add(3.14); c.add(new Object()); c.add(new Student()); c.add(true);
System.out.println("集合中元素个数是:" + c.size());
c.clear(); System.out.println("集合中元素个数是:" + c.size());
c.add("hello"); c.add("world"); c.add("浩克"); c.add("绿巨人"); c.add(1);
boolean flag = c.contains("绿巨人"); System.out.println(flag); boolean flag2 = c.contains("绿巨人2"); System.out.println(flag2); System.out.println(c.contains(1));
System.out.println("集合中元素个数是:" + c.size());
c.remove(1); System.out.println("集合中元素个数是:" + c.size());
System.out.println(c.isEmpty()); c.clear(); System.out.println(c.isEmpty());
c.add("abc"); c.add("def"); c.add(100); c.add("helloworld!"); c.add(new Student());
Object[] objs = c.toArray(); for(int i = 0; i < objs.length; i++){ Object o = objs[i]; System.out.println(o); } } }
class Student{
}
|
集合遍历/迭代(重点!)
迭代原理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;
public class CollectionTest02 { public static void main(String[] args) { Collection c = new ArrayList(); c.add("abc"); c.add("def"); c.add(100); c.add(new Object()); Iterator it = c.iterator();
while(it.hasNext()){ Object obj = it.next(); System.out.println(obj); }
} }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator;
public class CollectionTest03 { public static void main(String[] args) { Collection c1 = new ArrayList(); c1.add(1); c1.add(2); c1.add(3); c1.add(4); c1.add(1);
Iterator it = c1.iterator(); while(it.hasNext()){ Object obj = it.next();
System.out.println(obj); }
Collection c2 = new HashSet(); c2.add(100); c2.add(200); c2.add(300); c2.add(90); c2.add(400); c2.add(50); c2.add(60); c2.add(100); Iterator it2 = c2.iterator(); while(it2.hasNext()){ System.out.println(it2.next()); } } }
|
contains方法 & remove方法
contains方法
深入Collection集合的contains方法:
boolean contains(Object o)
判断集合中是否包含某个对象o
如果包含返回true, 如果不包含返回false。
contains方法是用来判断集合中是否包含某个元素的方法,
那么它在底层是怎么判断集合中是否包含某个元素的呢?
调用了equals方法进行比对。
equals方法返回true,就表示包含这个元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import java.util.ArrayList; import java.util.Collection;
public class CollectionTest04 { public static void main(String[] args) { Collection c = new ArrayList();
String s1 = new String("abc"); c.add(s1);
String s2 = new String("def"); c.add(s2);
System.out.println("元素的个数是:" + c.size());
String x = new String("abc"); System.out.println(c.contains(x)); } }
|
remove方法
关于集合元素的remove
重点:当集合的结构发生改变时,迭代器必须重新获取,如果还是用以前老的迭代器,
会出现异常:java.util.ConcurrentModificationException
重点:在迭代集合元素的过程中,不能调用集合对象的remove方法,删除元素c.remove(o); 迭代过程中不能这样。
会出现:java.util.ConcurrentModificationException
重点:在迭代元素的过程当中,一定要使用迭代器Iterator的remove方法,删除元素,
不要使用集合自带的remove方法删除元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;
public class CollectionTest06 { public static void main(String[] args) { Collection c = new ArrayList();
Iterator it = c.iterator();
c.add(1); c.add(2); c.add(3);
Collection c2 = new ArrayList(); c2.add("abc"); c2.add("def"); c2.add("xyz");
Iterator it2 = c2.iterator(); while(it2.hasNext()){ Object o = it2.next(); it2.remove(); System.out.println(o); }
System.out.println(c2.size()); } }
|
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| import java.util.ArrayList; import java.util.Collection;
public class CollectionTest05 { public static void main(String[] args) { Collection c = new ArrayList(); User u1 = new User("jack"); c.add(u1);
User u2 = new User("jack");
System.out.println(c.contains(u2));
c.remove(u2); System.out.println(c.size());
Collection cc = new ArrayList(); String s1 = new String("hello"); cc.add(s1);
String s2 = new String("hello"); cc.remove(s2); System.out.println(cc.size()); } }
class User{ private String name; public User(){} public User(String name){ this.name = name; }
public boolean equals(Object o) { if(o == null || !(o instanceof User)) return false; if(o == this) return true; User u = (User)o; return u.name.equals(this.name); }
}
|