zoukankan      html  css  js  c++  java
  • thinking in java笔记 11 持有对象

    ***基本概念
        java容器类库用途是保存对象。分为2类:
        1 Collection
          一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,Set不能有重复元素。Queue按照排队规则来确定对象产生的顺序(通常与插入的顺序相同)。
        2 Map
          一组成对的键值对对象,允许使用键来查找值,将数字和对象关联到一起。映射表允许我们使用另一个对象来查找某个对象,也被称为关联数组或字典。
        应尽量使用接口去声明对象,如:List<Apple> apples = new ArrayList<Apple>(); 
       创建出一个具体类的对象,将其转型为对应的接口,在其余的代码中都使用这个接口。

    ***Arrays类 Collections类
        包含一些常用的排序 查询 转换等静态方法

         class A{}
           class AA1 extends A{}
           class AA2 extends A{}
           class AAA1 extends AA1{}
           class AAA2 extends AA1{}

           public class MyTest {
                 public static void main(String[] args) {    
                      List<A> list1=Arrays. asList ( new AA1(), new AA2()); //right
                      List<A> list2= Arrays. asList ( new AAA1(), new AAA2()) ; //wrong
                      List<A> list3=Arrays.<A> asList ( new AAA1(), new AAA2()); //right
                }
          }
            第二种asList,由于添加的是AAA1 AAA2对象,默认应为List<A1>,所以出错,需在asList前声明类型,但
              List<A> list=Arrays. asList ( new AA1(), new AA2());
                      Collections. addAll (list, new AAA1(), new AAA1() );
        Collections的addall方法正确,因为第一个参数说明了list的类型。
    ***List类型
        ArrayList LinkedList
        都按照被插入的顺序保存元素,区别在于执行某些操作时的性能。且LinkedList包含的操作也多于ArrayList.
        ArrayList  :长于随机访问元素,但是在List的中间插入和移除元素时较慢。
        LinkedList:在List中间插入删除较快,提供优化的顺序访问。随机访问时较慢,特性集较ArrayList  大。
                  各种Queue以及栈的行为,由LinkedList提供支持。
    ***Set类型
        HashSet TreeSet LinkedHashSet 
        输出显示在Set中,每个相同的项只保存一次,但存储的方式不同。
        Hashset存储方式复杂,但保证了最快的获取速度。
        TreeSet按照升序保存对象
         LinkedHashSet按照添加的顺序保存对象
    ***Map
        可以使用键来查找对象,类似于数组下标。Map.put(key,value)插入数据,Map.get(key)查找数据。键要求唯一。存储方式不是顺序存储,速度快。
        HashMap使用最快的查找技术,存储无顺序。TreeMap按照比较结果升序保存。LinkedHashMap按照插入顺序保存键,同时保留HashMap的查询速度。
    ***迭代器
        容器缺点:使用容器,必须对容器的确切类型进行编程,但若像更换或扩展至其他容器,必须重写代码。迭代器可以解决这个问题。它是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构。它是轻量级对象,创建的代价小。
        迭代器能够将遍历序列的操作与序列底层的结构分离,它统一了对容器的访问方式,这是它的威力所在。
    ***Queue
        先进先出容器,是区域之间传输对象的可靠的途径,在并发编程中尤为重要。
        PriorityQueue确保调用peek() poll() remove() 时,获取的元素是队列中优先级最高的元素。即可以对队列中的元素进行排序操作。
        
    ***Collection与Iterator
        都可以实现与底层容器的解耦。Collection可以使用foreach,看起来更清晰,但必须实现Collection接口中的方法,如果选择继承AbstractCollection类,仍必须实现iterator方法和size方法。而在类内部使用Iterator则可以避免以上不足,是将队列和消费队列的方法连接在一起耦合度最小的方式。
    ***foreach与迭代器
        实现了Iterable接口的类,都可以被用在foreach中。数组到Iterable之间必须进行显式转换。
    ***过时
        新程序不应使用过时的Vector Hashtable Stack
    ***适配器模式
        
  • 相关阅读:
    Delphi 2009 新增单元 Character[1]: ToUpper、ToLower
    复制整个文件夹(当然包括嵌套文件夹)
    Delphi 的匿名多线程
    Delphi 2009 泛型容器单元(Generics.Collections)[4]: TDictionary<T>
    Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStack<T>
    Delphi 2009 泛型容器单元(Generics.Collections)[2]: TQueue<T>
    Delphi XE 10.3.3 RSA 签名(IdSSLOpenSSLHeaders)
    Delphi XE 与 Delphi 7 转换
    webacula安装部署流程
    webacula root登陆密码错误解决方案
  • 原文地址:https://www.cnblogs.com/myparamita/p/2203972.html
Copyright © 2011-2022 走看看