【Java】Collection单列集合,List、Set
- Collection接口:单列集合,存储一个一个的对象
- List接口:存储有序、可重复的数据,长度可变。-->相当于“动态”数组。
- Set接口:存储无序的、不可重复的数据。-->相当于高中讲的“集合”(无序、确定、互斥)。
- Map接口:双列集合(映射),存储键值对key-value -->函数:y = f(x),不同的x可以指向同一个y(\(y = x^2\)),同一个x不能指向多个y;x就相当于key,y相当于value。
1.Collection接口

2.Collection接口中的常用方法
| 方法 | 描述 |
|---|---|
| add(Object e) | 将元素e添加到集合中 |
| addAll(Collection coll) | 将集合coll中的元素添加到当前集合中 |
| size() | 获取集合中元素个数 |
| clear() | 清空集合元素 |
| isEmpty() | 判断当前集合是否为空 |
| contains(Object obj) | 判断当前集合中是否有obj,会调用obj所在类的equals方法 |
| containsAll(Collection coll) | 判断coll集合中的所有元素是否都存在于当前集合中 |
| remove(Object obj) | 从当前集合中移除obj |
| removeAll(Collection coll) | 从当前集合中移除coll集合的所有元素 |
| retainAll(Collection coll) | 获取当前集合和coll集合的交集,并返回给当前集合 |
| equals(Object o) | 要想返回true,需要当前集合和形参集合的元素都相同 |
| hashCode() | 返回当前对象的hash值 |
| Object[] arr = coll.toArray(); | 集合-->数组 |
| Iterator iterator = coll.iterator(); | 返回的迭代器对象用于遍历集合 |
public void test1() {
Collection coll = new ArrayList();
coll.add("AA"); //1.add()
coll.add(123); //自动装箱
coll.add(new Date());
int size = coll.size(); //3.size()
Collection coll2 = new ArrayList();
coll2.add(456);
coll2.add("CC");
coll.addAll(coll2); //2.addAll()
coll.clear(); //4.clear()
coll.isEmpty(); //5.isEmpty()
Collection coll3 = new ArrayList();
coll3.add(123);
coll3.add(new Person("Jerry", 18));
coll3.add(new String("Tom"));
coll3.add(false);
boolean isContains1 = coll3.contains(123); //true 6.contains()
boolean isContains2 = coll3.contains(new String("Tom")); //true
boolean isContains3 = coll3.contains(new Person("Jerry", 18)); //false,会调用person对象所在类的equals方法
Collection coll4 = new ArrayList();
coll4.add(123);
coll4.add(4567);
boolean isContains4 = coll3.containsAll(coll4); //false 7.containsAll()
coll3.remove(123); //8.remove()
boolean jerry = coll3.remove(new Person("Jerry", 18));//Person类中没有重写equals的话返回false
coll3.removeAll(coll4); //差集 9.removeAll()
boolean b = coll3.retainAll(coll4);//交集,结果返回给coll3,10.retainAll()
coll3.hashCode();
coll3.equals(coll4);
}
3.集合与数组之间的转换
(1)集合-->数组
Object[] arr = coll4.toArray();
(2)数组-->集合
调用工具类Arrays类的静态方法asList();
String[] names = new String[]{"张三","李四","王五"};
List<String> nameList = Arrays.asList(names);
4.使用iterator对象遍历集合中的元素
(1)创建对象,每次调用这个方法都会得到一个全新的对象
Iterator iterator = coll.iterator();
(2)Iterator接口中的方法
hasNext():判断是否有下一个元素next():指针下移,下移后将集合位置上的元素返回。remove():删除集合中的元素,不是Collection接口中的remove- 指针未指向元素、集合为空、重复remove都会报IllegalStateException
初始时指向前一个位置,调用next指向下一个

(3)错误方式
//集合数据
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add(new String("Tom"));
coll.add(false);
//错误方式一:多次调用next,只打印了456,tom
Iterator iterator = coll.iterator();
while ((iterator.next())!=null){
System.out.println(iterator.next());
}
//错误方式二:每次调用iterator()方法都会得到一个新的对象,报NoSuchElementException
while (coll.iterator().hasNext()){
System.out.println(coll.iterator().next());
}
(4)删除集合中的tom
Iterator iterator = coll.iterator();
while (iterator.hasNext()){
Object obj = iterator.next();
if ("Tom".equals(obj)){
iterator.remove();
}
}
5.foreach循环
jdk 5.0新增,遍历集合和数组
for (Object obj : coll) {
System.out.println(obj);
}
int[] arr = {1, 2, 3, 4, 5, 6};
for (int i : arr) {
System.out.println(i);
}

浙公网安备 33010602011771号