第11章 持有对象

1、容器只有四类:List、Set、Queue、Map。其中List和Set和Queue继承自Collection,实现了iterator方法,所以有统一的访问对象的方式,可以使用迭代器iterator访问对象, 只需在对象中调用该方法即可。Map不实现Collection接口,可以通过keySet()或valus()或entry()(注释:entry包括key和value,所以可以用entry.getKey()和entry.getValue() 得到键值)。
2、List:有两种实现方式ArrayList和LinkedList,前者随机访问速度快,后者插入删除速度快。另外LinkedList继承了Queue,可以用来做栈、队列、双向列表用。
3、Set分三种:HashSet(速度快,无序)、TreeSet(字典序)、LinkedHashSet(按插入顺序)。
4、Queue可以用LindedList实现,按插入顺序,还有一种有优先级的队列PriorityQueue,即插入后排序,按堆实现
5、Map分三种:HashMap(无序)、TreeMap(键按字典序)、LinkedHashMap(键按插入序);
遍历方法:用keySet()方法或者entry方法等
6、容器的contains方法,是基于equals方法的,一般比较的是引用,不过类库中的大部分类已经重写了该方法,变成比较对象。string比较的是值,基本类型(或用new Integer等 包装器包装多的基本类型对象)也是比较的值
7、java.util中包含Collections和Arrays两个很有用的工具类。Collections.addAll(Collection c,一个数组或用逗号隔开的列表)将元素加入到c中。Arrays.asList()方法接收一个数组 或是用逗号隔开的元素列表(使用可变参数),并将其转换为一个List对象。注意Collection的构造器可以接收另一个构造器用它来讲自身初始化(包括了List Set Queue)。
8、List<E>list=new ArrayList<E>(Arrays.asList(1,2,3,4));这种方式可以增删list,因为用容器包装了。
因为Arrays.asList()操作的是数组,所以List<E>list=Arrays.asList(1,2,3,4);这种方式是不可以使用的list.add(4),因为是数组大小以及确定。同理Integer[]kk=new Integer[] {1,2,3,3};如果是List<E>list=Arrays.asList(1,2,3,4)在对list操作时会改变kk数组,而第一种不会
9、之所以List、Set等可以使用foreach语法是因为实现了Iterator接口。所以map不可以,此外数组没有实现该接口,但是也可以用foreach语法。

你可能感兴趣的:(java,容器,持有对象)