1.集合不能直接存储基本数据类型,另外集合也不能直接存储java对象,集合当中存储的都是java对象的内存地址。(或者说集合中存储的是引用。)
list.add(100); //自动装箱Integer
注意:
集合在java中本身是一个容器,是一个对象。
集合中任何时候存储的都是“引用”。
2.集合在java JDK中哪个包下?
java.util.*;
所有的集合类和集合接口都在java.util包下。
3.在java中集合分为两大类:
一类是单个方式存储元素:
单个方式存储元素,这一类集合中超级父接口:java.util.Collection;
一类是以键值对儿的方式存储元素:
以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map;
4.集合的继承结构图(常用的实现类)
5.Collection中的contains方法
boolean contains(Object o)(判断集合是否包含元素o):这个方法底层调用了equals方法进行比较,我们可以通过以下代码对这个方法有更深的了解:
import java.util.ArrayList;
import java.util.Collection;
/*boolean contains(Object o)方法深入*/
public class CollectionTest03 {
public static void main(String[] args) {
Collection c = new ArrayList();
String str1 = "hello";
String str2 = "hello";
c.add(str1);
System.out.println("集合c里面包含str2吗:" + (c.contains(str2) ? "包含" : "不包含"));//结果是包含,因为String重写了equals方法,这里相当于str1.equals(str2)
// 构建User对象
User u1 = new User("张三");
User u2 = new User("张三");
c.add(u1);
System.out.println("集合c里面包含u2吗:" + (c.contains(u2) ? "包含" : "不包含"));//结果是不包含,因为User没有重写equals方法,比较的是内存地址
}
}
/*自定义一个User类*/
class User {
private String name;
public User(String name) {
this.name = name;
}
}
6.Collection中的remove方法
boolean remove(Object o) (删除集合中某个元素):底层也是调用了equals方法比较,然后删除。
7.Collection中的iterator方法(从父接口Iterable继承过来的)
该方法返回一个迭代器Iterator对象,一般通过调用它的方法hasNext(判断是否还有下一个元素)和next(让迭代器指针前进一位,并将指向的引用返回,最开始迭代指针指向第一个元素的前面)遍历集合,需要注意的是,集合结构发生改变,迭代器必须重新获取,否则会报如下异常java.util.ConcurrentModificationException
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest04 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("abc");
c.add("def");
c.add("xyz");
Iterator it = c.iterator();
while(it.hasNext()) {
Object obj = it.next();
// 删除元素之后,集合结构发生改变,应该重新获取迭代器
// 但是在这里,下一次循环的时候没有重新获取迭代器,所以报java.util.ConcurrentModificationException异常
// c.remove(obj);//直接通过集合去删除元素,没有通知迭代器(导致迭代器的快照和原集合状态不同)
// 使用迭代器中的remove方法来删除
it.remove();//删除迭代器现在指向的元素,在迭代器和集合中一起删去,保证了两者装态相同,不会出现异常
System.out.println(obj);
System.out.println("目前集合中的元素个数:" + c.size());
}
}
}
8.注意:HashSet中的元素实际存放到了HashMap中的key里
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}