http://www.cnblogs.com/LittleHann/p/3690187.html import java.util.*; public class TestCollection { public static void main(String[] args) { Collection arrayList = new ArrayList(); arrayList.add("====天晴朗====="); arrayList.add("====暖花儿朵朵绽放===…
集合类存储在任何编程语言中都是很重要的内容,只因有这样的存储数据结构才让我们可以在内存中轻易的操作数据,那么在Java中这些存储类集合结构都有哪些?内部实现是怎么样?有什么用途呢?下面分享一些我的总结 集合类存储结构的种类及其继承关系图 图中只列出了比较关键的继承关系,在Java中所有的集合类都实现Collection接口,在直接的继承关系中主要分为两大接口:一个是列表实现的List接口,另一个是集合实现的Set接口.在列表中最为常用的实现类是ArrayList和LinkedList.在集合中最…
枚举器与数据操作 1)枚举器为我们提供了访问集合的方法,而且解决了访问对象的“数据类型不确定”的难题.这是面向对象“多态”思想的应用.其实是通过抽象不同集合对象的共同代码,将相同的功能代码封装到了枚举器的这个接口里,就可以用一套代码来遍历不同类型的集合. 2)每个集合类(Vector或Hashtable等)都有一个iterator方法,各集合对象可以通过这个方法把遍历本类的控制权交给Iterator接口. 3)Iterator接口提供了boolean hasNext()方法判断是否到了集合的最后…
随着1998年JDK 1.2的发布,同时新增了常用的Collections集合类,包含了Collection和Map接口.而Dictionary类是在1996年JDK 1.0发布时就已经有了.它们都可以在rt.jar这个基础类库包中找到.全文以JDK8为例,尝试介绍Collections集合类的相关内容. 它们的关系如上图所示,标蓝的为抽象类,实线全箭头指的是extends(继承),虚线全箭头表示implement(实现),虚线半箭头依赖指的是这个类里面有依赖接口或者类的成员变量,比如HashS…
Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person[] p; system.out.println(p.length);//报错,不允许对null对象进行任何实际操作.       person[] p=new person[5]; Vector类——数组的改进: 1)四个构造函数 Vector(int initialCapacity,int ca…
Collection 是对象集合, Collection 有两个子接口 List 和 Set,List 可以通过下标 (1,2..) 来取得值,值可以重复,而 Set 只能通过游标来取值,并且值是不能重复的 ArrayList , Vector , LinkedList 是 List 的实现类 ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的 Map 是键值对集合 HashTable 和 Ha…
在数组中查找一个元素,Arrays提供了一个方便查询的方法.Arrays.binarySearch(): 测试列子: public class MainTestArray { public static void main(String args[]){ String[] intArray = new String[]{"a","b","c","d","e","f","g&qu…
java中常见的集合类大部分是非线程安全的,在多线程情况下会报并发修改异常(ConcurrentModificationException) 并发下的ArrayList类: //集合类不安全的例子 public class CollectionNotSafe { public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 0; i < 50; i++)…
1,什么是写时复制(Copy-On-Write)容器? 写时复制是指:在并发访问的情景下,当需要修改JAVA中Containers的元素时,不直接修改该容器,而是先复制一份副本,在副本上进行修改.修改完成之后,将指向原来容器的引用指向新的容器(副本容器). 2,写时复制带来的影响 ①由于不会修改原始容器,只修改副本容器.因此,可以对原始容器进行并发地读.其次,实现了读操作与写操作的分离,读操作发生在原始容器上,写操作发生在副本容器上. ②数据一致性问题:读操作的线程可能不会立即读取到新修改的数据…
对于Java中的各种集合类,根据底层的具体实现,小结了一下大致有3种扩容的方式: 1.对于以散列表为底层数据结构实现的,(譬如hashset,hashmap,hashtable等),扩容方式为当链表数组的非空元素除以数组大小超过加载因子时, 链表数组长度变大(乘以2+1),然后进行重新散列. 2.对于以数组为底层数据结构实现的,譬如ArrayList,当数组满了之后,数组长度变大(乘以3/2+1),然后将原数组中的数据复制到新数组中. 3.对于以链表结构实现的,譬如TreeSet,TreeMap…