欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第11章 持有对象

程序员文章站 2024-03-17 18:41:34
...

首先想说持有这词用的真好

基础知识

第11章 持有对象

  • 图描述:图中只有四种容器:Map , ListSetQueue . 常用的容器用黑色的粗线框表示。(点线框表示接口,实线框表示普通的(具体的)类。带有空闲箭头的电线表示一个特定的类实现了一个接口,实心箭头表示可以生成箭头所指向类的对象。)

  • java有多种方式保存对象,更确切的说是对象的引用

  • java容器类可以划分为两个不同的概念: Collection: 一个独立的序列 (所有的Collection,都可以用foreach) Map: 一组成对的键值对对象
  • 常用的有4类容器:set map list queue
    • list必须按照插入的顺序保存元素
    • set不能有重复的元素
    • queue按照排队的规则来确定对象的产生顺序(通常与插入的顺序相同)
  • @Suppress warnings('unchecked')可以压制警告信息
  • 向上转型也可以像其他类型一样作用于泛型(其实子类可以存放进具有父类约束的容器中):
class GrannySmith extends Apple {}
class Gala extends Apple {}
class Fuji extends Apple {}
class Braeburn extends Apple {}

public class GenericsAndUpcasting {
  public static void main(String[] args) {
    ArrayList<Apple> apples = new ArrayList<Apple>();
    apples.add(new GrannySmith());
    apples.add(new Gala());
    apples.add(new Fuji());
    apples.add(new Braeburn());
    for(Apple c : apples)
      System.out.println(c);
  }
} 
  • 向容器中添加一组元素:
Collection<Integer> collection =
      new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
Integer[] moreInts = { 6, 7, 8, 9, 10 };
collection.addAll(Arrays.asList(moreInts));
// Runs significantly faster, but you can't construct a Collection this way:
    Collections.addAll(collection, 11, 12, 13, 14, 15);
    Collections.addAll(collection, moreInts);

注意:Arrays.asList(*)其底层表示的还是数组,因此不能调整尺寸

List<Integer> list = Arrays.asList(16, 17, 18, 19, 20);
list.set(1, 99); // OK -- modify an element
// list.add(21); // Runtime error because the
                     // underlying array cannot be resized.
  • Collection的打印风格:[rat, cat, dog, dog]
  • Map的打印风格:{dog=Spot, cat=Rags, rat=Fuzzy}
  • ArrayList和LinkedList都是list类型,它们都可以保存元素的顺序,只是在某些操作上的性能不同
  • 注意:对于内置对象,java负责编写了equals方法,但是自己编写的类,却没有
  • -

set

  • set对于每个值都只保存一个对象
  • HashSet使用最复杂的技术保存对象,但是能够最快的获取元素,但不能保持顺序。TreeSet按照比较的结果升序保存对象。LinkedHashSet按照添加的顺序保存对象,同时保存了HashSet的查找速度
  • set不保存重复的元素
  • TreeSet将元素存储在红-黑树的数据结构中,二HashSet使用的是散列函数。LinkedHashList因为查询速度的原因也使用了散列。

map

  • map也有HashMap, TreeMap, LinkedHashMap,性质同Set.
  • -

list

  • 有两种基本类型:
    • ArrayList: 擅长于随机访问,插入和删除操作较慢
    • LinkedList:擅长插入和删除,随机访问相对较慢

Queue

  • 队列在并发任务中非常的重要
  • LinkedList 提供了方法以支持队列的行为,并且它也实现了 Queue 接口.
    • offer() 将一个元素插入到队列尾,或者返回 false
    • peek() 和 element() 都在不移除的情况下返回队头, 但是peek()方法在队列为空时,返回null element() 会抛出NoSuchElementException异常
    • poll() 和 remove() 方法将移除并返回队头, 在队列为空的时候,poll会返回null, remove会抛出NoSuchElementException异常
  • PriorityQueue
    • 当时用 offer() 插入一个对象的时候,这个对象会在队列中被排序。默认的排序是使用对象在队列中的 自然顺序,但是可以通过Comparator来修改这个顺序。
    • -
相关标签: 接口