By CaesarChang 合作: root121toor@gmail.com
~关注我 带你看更多精品知识
类集中最大的几个操作接口:Collection、Map、Iterator,这三个接口为以后要使用的最重点的接口。
------------------------为了更好的学习集合 ,先简单串一下数据结构-------------------------------
链表:
二叉树:
二叉树是树的一种,每个节点最多可具有两个子树,即结点的度最大为 2(结点度:结点拥 有的子树数)。
完全二叉树
若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
二叉树的遍历方式
栈
栈(stack)是限定仅在表尾进行插入和删除操作的线性表。我们把允许插 入和删除的一端称为栈顶,另一端称为栈底 特点: 1先进后出 2栈的入口出口都是栈的顶端位置
队列:
队列是一种特殊的线性表,是运算受到限制的一种线性表,只允许在表的 一端进行插入,而在另一端进行删除元素的线性表。队尾(rear)是允许插入的一端。队头(front)是 允许删除的一端。
数组:
数组是在内存中开辟一段连续的空间, 指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原 数组元素根据索引,复制到新数组对应索引的位置。 指定索引位置删除元素:需要创建一个新数组,把原数组元素根据索引,复制到新数组对应 索引的位置,原数组中指定索引位置元素不复制到新数组中。 特点: 查找元素快 增删元素慢
--------------------------------------正片开始--------------------------------------------------
集合和数组既然都是容器,它们有啥区别呢?
数组的长度是固定的。集合的长度是可变的。 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类 型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。
Collection集合
Collection是所有单列集合的父接口,单列集合(List和Set)是Collection的子类,每次操作的时候都只能保存一个对象的数据
常用方法: 。 public boolean add(E e) : 把给定的对象添加到当前集合中 。 public void clear() :清空集合中所有的元素 。 public boolean remove(E e) : 把给定的对象在当前集合中删除 。 public boolean contains(E e) : 判断当前集合中是否包含给定的对象 。 public boolean isEmpty() : 判断当前集合是否为空 。 public int size() : 返回集合中元素的个数 。 public Object[] toArray() : 把集合中的元素,存储到数组中
List接口
继承了Collection的所有 ,又增加了一些特有 常用方法: 。public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上 。 public E get(int index) :返回集合中指定位置的元素 。 public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素 。 public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新 前的元素。 其子类 ArrayList Vector LinkList
ArrayList
线程不安全,有List 和Collection的所有方法,默认数组大小 10
Vector
线程安全 ArrayList有的都会有
ArrayList和Vector相同点与区别:
同: 1 ArrayList和Vector都是继承了相同的父类和实现了相同的接口 2 底层都是数组(Object[])实现的 3 初始默认长度都为10。 区别: 1 同步性: Vector中的public方法多数添加了synchronized关键字、以确保方法同步、也即是Vector线程安全、ArrayList线程不安全。 2 扩容: ArrayList以1.5倍的方式在扩容、Vector 当扩容容量增量大于0时、新数组长度为原数组长度 扩容容量增量、否则新数组长度为原数组长度的2倍 3性能: 在性能方便通常情况下ArrayList的性能更好、而Vector存在synchronized 的锁等待情况、需要等待释放锁这个过程、所以性能相对较差。 4 输出: ArrayList支持支持 Iterator、ListIterator 输出,Vector除了支持 Iterator、ListIterator外,还有Enumeration输出
LinkedList(理解)
存储的结构是链表结构 List里面的方法多有 同时还有自己特有的 。public void addFirst(E e) :将指定元素插入此列表的开头 。 public void addLast(E e) :将指定元素添加到此列表的结尾 。 public E getFirst() :返回此列表的第一个元素 。 public E getLast() :返回此列表的最后一个元素 。 public E removeFirst() :移除并返回此列表的第一个元素 。 public E removeLast() :移除并返回此列表的最后一个元素 。 public E pop() :从此列表所表示的堆栈处弹出一个元素 。 public void push(E e) :将元素推入此列表所表示的堆栈 。 public boolean isEmpty() :如果列表不包含元素,则返回true。
Iterator接口
用来遍历Collcection集合下的所有集合 List Set啦... public E next() :返回迭代的下一个元素 同时指针下移。 public E previous() :返回迭代的上一个元素 同时指针上移。 public boolean hasNext() :如果仍有元素可以迭代,则返回 true 增强for for(数据类型 变量名 : 集合 或 数组名){}
Set接口
Set 接口也是 Collection 的子接口,与 List 接口最大的不同在于,Set 接口里面的内容是不允许重复的 无 get方法 获取方法 1 iterator迭代 2toArray 进行遍历
HashSet
Set的子类, 也无get方法,也不允许重复,,散列存放(顺序不能保证) 获取方法 1 iterator迭代 2toArray 进行遍历 使用举例:
TreeSet和Comparable
有序(按照元素顺序,不是你输入的顺序 ), 此类iterator快递失败, 自定义类实现对象排序: 要比较的类实现Comparable接口
Comparator比较器
将Comparator 传递给sort方法(如Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制
“只要是碰到了集合,则输出的时候想都不想就使用 Iterator 进行输出。”
--------------------------------单值存储结束了------------------------------
Map<K,V> 集合
Map集合存储的是一个个的键值对数据 key value key不可重复
举例:
HashMap
使用对象数组加链表, 当哈希桶的使用超过u,扩容桶为二倍
如果key相同,并且hashCode相同,那么value会被覆盖 如果key相同,但是hashcode不同,那么value不会被覆盖
Map集合及各子类区别分析:
TreeMap : 有序(自动排序))的Map集合 LinkedHashMap: 也是有序,又有hashMap快速查找的优点
请移步 javaIO点击我进入JavaIO
感觉写的不错的点个赞呗 谢谢了