类集: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接口的子接口。