您的位置:首页 > 编程语言 > Java开发

第十一章 持有对象

2017-02-14 12:48 176 查看
1、泛型尖括号中的类型可以有多个,如:ArrayList<Apple,Orange>

2、LinkedList含有List接口中未包含的额外方法,而TreeMap也包含Map接口中未包含的方法,如果你需要使用这些方法,就不能将他们向上转型为更通用的接口,如下所示:

      List<Apple> list = nerw LinkedList<Apple>();

3、Arrays.List()方法创建出来的List是只读的,不能用add和remove方法,如要要避免这种问题,可以使用如下语法:

      List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3)); 

4、类型转换问题,参见java编程思想相关代码类:AsListInference

5、ArrayList和LinkedList按照被插入的顺序保存元素

      HashSet、TreeSet和LinkedHashSet集合中,每个相同的项只保存一次

      HashSet使用相当复杂的方式来存储元素,这种技术是最快的获取元素的方式,因此,存储的顺序看起来没有实际意义,如果存储顺序很重要,那么可以使用TreeSet,它按照比较结果的升序保持对象(排序),或者使用LinkedHashSet,他按照被添加的顺序保存对象

      HashMap提供了最快的查找速度,也没有顺序。TreeMap按照比较结果的升序保持键,LinkedHashMap则按照插入顺序保持键,同时还保留了HasmMap的查询速度

      ArrayList:随机访问其中的某个元素较快,在中间插入和移除元素较慢

      LinkedList:随机访问较慢,顺序访问较快,在中间插入和移除元素较快

6、ArrayList  retainAll  取交集

7、迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列的底层结构

public class CrossContainerIteration {

  public static void display(Iterator<Pet> it) {

    while(it.hasNext()) {

      Pet p = it.next();

      System.out.print(p.id() + ":" + p + " ");

    }

    System.out.println();

  }

  public static void main(String[] args) {

    ArrayList<Pet> pets = Pets.arrayList(8);

    LinkedList<Pet> petsLL = new LinkedList<Pet>(pets);

    HashSet<Pet> petsHS = new HashSet<Pet>(pets);

    TreeSet<Pet> petsTS = new TreeSet<Pet>(pets);

    display(pets.iterator());

    display(petsLL.iterator());

    display(petsHS.iterator());

    display(petsTS.iterator());

  }

}

8、ListIterator是一个更强大的迭代器,他只能用于list的访问,尽管Iterator只能向前移动,打算ListIterator可以双向移动,它还可以产生相对于迭代器在列表中指向的当前位置的前一个位置和后一个位置的索引,并且可以使用set方法替换他访问过的最后一个元素,你可以通过调用listInterator()方法产生一个指向List开始处的ListItreator,并且还可以通过调用listInterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListItreator

9、LinkedList:

1)、getFirst()和elements()完全一样,他们都返回列表的头部(第一个元素)而并不移除他,如果List为空,则抛出异常,peek()方法差不多,单在列表为空时                                     返回null

                        2)、removeFirst()和remove)()也是完全一样的,他们移除并返回列表的头,而在列表为空时抛出异常,pool()稍有不同,他在列表为空时返回null

                        3)、addFirst()和add()和addLast()相同,他们都将某个元素插入到列表的尾(头)部

                        4)、removeLst移除并返回最后一个元素

5)、peek方法返回第一个元素,pop方法移除并返回第一个元素

10、TreeSet可以用于排序,但是默认的顺序是按照字典顺序,大小和小写是被分隔开来的,如果希望排序能够忽略大小写,则可以通过给TreeSet的构造方法中传入如下比较器:

Set<String> words =  new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);

11、map.ketSet() 返回map中所有的键(存在一个set当中,有此可见map中的key是不可重复的)

        map.values() 返回map中所有的值(存在一个Collection中)

12、队列是一个典型的先进先出的容器,常被当作一种可靠的将对象从程序的某个区域传输到另一个区域的途径,队列在并发编程中尤其重要,因为它可以安全的将对象从一个任务传输给另一个任务。LInkedList提供了方法以支持队列的行为,并且它实现了Queue接口,因此LInkedList可以作为Queue的一种实现

 queue.offer将元素插入队尾

13、PriorityQueue,优先级队列,声明下一个弹出元素是最需要的元素,具有最高的优先级,默认是自然排序,也可以提供自己的比较器Comparator来实现其他规则的排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 编程思想 集合