java之集合笔记1

类集:Collection接口

{{1,2},2,3,4} 的子集{{1,2},2}

1.堆栈Stack:类 后进先出(LIFO) 线性表 顺序存储结构  初始容量为0 可变容量  size()表示元素个数

   增删查方法:压栈push 出栈pop 查询栈顶元素peek

 索引  0 1 2  3 4

 数据  1 2    5 6  顺序存储结构不允许

 LIFO:Last In First Out

              队头          队尾

  队列数据      1   2 3 4    5

2.队列Queue: 接口  声明的方法只能对队头(类似于栈底)进行操作   先进先出(FIFO)队列  单端队列

  队列Deque: 接口  声明的方法可以对队头或队尾(类似于栈顶)进行操作  双端队列  它是Queue的子接口

  常用实现类:ArrayDuque 线性表 先进先出(FIFO) 双端队列 顺序存储结构 初始容量为16 可变容量

         LinkList 

  增删查方法(抛出异常):add remove element 

  增删查方法(返回特殊值):offer  poll  peek

  

  栈和队列笔试题:http://www.cnblogs.com/wzyxidian/p/5931516.html  

  

3.列表List:接口 常用实现类:ArrayList 数组结构 LinkedList  链式表

  ArrayList   类    存储的数据不唯一(允许重复)  可变容量   初始容量为10

  LinkedList  类    存储的数据不唯一  可变容量 (同时是Queue的实现类,这是允许元素重复的队列)

  增删改查方法(抛出异常):add remove set  get

  增删查方法(返回特殊值):offer  poll  peek

  有序的理解:实现序列化接口Serializable,可以将集合对象转换为字节流的形式进行输入输出;

  header next

   ArrayList 和 linkedList 的区别 :

     1.ArrayList是实现了基于动态数组的数据结构(实现接口RandomAccess,可以快速访问),

 LinkedList基于链表的数据结构(实现双端队列接口Deque)。

       

     2.对于随机访问get和set,ArrayList绝对优于LinkedList,

     ArrayList

               因为LinkedList要移动指针。 

         

     3.对于新增和删除操作add和remove,LinkedList比较占优势(只有在尾部插入元素时ArrayList稍微占优),

               因为ArrayList要移动数据。 

注意:Arrays.asList(T...a)将一个数组转换成基于数组结构存储的List(实现类为Arrays的内部类),

但它只适用于随机访问,不支持add及remove操作。

4.集合set 接口   常用实现类:HashSet  TreeSet

   HashSet  类  无序的  存储数据唯一(自动去重) 元素允许为null 

   TreeSet是一个有序集合,TreeSet中的元素将按照升序排列,是按照自然排序进行排列,

   意味着TreeSet中的元素要实现Comparable接口。或者有一个自定义的比较器。

   我们可以在构造TreeSet对象时,传递实现Comparator接口的比较器对象。

        1: 如果存储 TreeSet 集合中的数据必须实现Comparable接口。

        2: 如果是对象排序  需要被比较的类必须必须实现Comparable接口 

       * TreeSet    存储的数据 是一同类型数据

5.迭代器(Iterator)-----迭代设计模式

   迭代器是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。

   迭代器通常被称为“轻量级”对象,因为创建它的代价小。

   Java中的Iterator功能比较简单,并且只能单向移动:

  (1) 使用方法iterator()要求容器返回一个Iterator。

               第一次调用Iterator的next()方法时,它返回序列的第一个元素。

               注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  (2) 使用next()获得序列中的下一个元素。

  (3) 使用hasNext()检查序列中是否还有元素。

  (4) 使用remove()将next()返回的元素删除。

 6 Map<K,V> 接口 键值对格式存储数组,键Key是唯一的,一个Key对应一个值Value  <1,2> <2,2> <ip,username>

   常见实现类:HashMap TreeMap

    HashMap 特点 : 

     1.HashMap可以使用null作为key   key不重复 非线程安全

     2.HashMap是对Map接口的实现,

     3.HashMap的初始容量为16,填充因子默认都是0.75,HashMap扩容时是当前容量翻倍即:capacity*2

  HashMap  添加数据的原理:

             当我们调用put存值时,HashMap首先会调用Key的hashCode方法,获取哈希码,

             通过哈希码快速找到某个存放位置,这个位置可以被称之为bucketIndex,

      hashCode可能存在冲突的情况,有个专业名词叫碰撞,当碰撞发生时,

            计算出的bucketIndex也是相同的,

            这时会取到bucketIndex位置已存储的元素,最终通过equals来比较,

      equals方法就是哈希码碰撞时才会执行的方法,所以前面说HashMap很少会用到equals。

      HashMap通过hashCode和equals最终判断出K是否已存在,如果已存在,

             则使用新V值替换旧V值,并返回旧V值,如果不存在 ,则存放新的键值对<K, V>

             到bucketIndex位置

             

     两点注意的地方:

      HashMap通过键的hashCode来快速的存取元素。

            当不同的对象hashCode发生碰撞时,HashMap通过单链表来解决,将新元素加入链表表头,

              通过next指向原有的元素。单链表在Java中的实现就是对象的引用。

  7 枚举类型   

  7.1 声明格式:访问权限修饰符  enum 枚举类型名称{枚举对象1,枚举对象2,...,枚举对象n;}  //enum为关键字

  7.2 使用关键字enum声明的枚举类型相当于定义了一个类,该类默认继承java.lang.Enum类,

      而Enum类实现了comparable及Serializable两个接口,所以枚举类型可以使用比较器及序列化操作

  7.2 给枚举对象赋值:

     a.构造方法赋值

 b.setter方法赋值

  8 Properties 类  

  java中读写资源文件最重要的类是Properties

     1) 资源文件要求如下:

     1、properties文件是一个文本文件

     2、properties文件的语法有两种,一种是注释,一种属性配置。

          注    释:前面加上#号

          属性配置:以“键=值”的方式书写一个属性的配置信息。

     3、properties文件的一个属性配置信息值可以换行,但键不可以换行。值换行用“\”表示。

     4、properties的属性配置键值前后的空格在解析时候会被忽略。

     5、properties文件可以只有键而没有值。也可以仅有键和等号而没有值,

                但无论如何一个属性配置不能没有键。

  类集框架接口:

  超级接口:              Collection接口            Map接口

  常用的子接口:   

 Collection接口的子接口: Queue(队列,先进先出)  List(列表,元素可以重复)    Set(集,元素不允许重复) 

     Set接口的子接口:   SortedSet(前缀为Sorted的接口一般表示里面的元素可以进行排序,继承Set,则元素不允许重复) 

 Map接口的子接口:内部接口Map.Entry   外部接口SortedMap

使用Collection接口,意义不明确,不推荐使用;

 推荐使用 Collection接口的子接口。

猜你喜欢

转载自blog.csdn.net/wu1317581750/article/details/81187543