第11章 持有对象

来源:互联网 发布:windows 10 安装.net 编辑:程序博客网 时间:2024/05/17 08:20

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

基础知识

图1

  • 图描述:图中只有四种容器: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

原创粉丝点击