java中数组以及集合
java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象。但实际数组也是一种对象类型,int[]a = new int[5] a是在java栈中分配的引用变量,类型是int[] 数组类型,指向在堆里面地址连续的实际数组对象。
在内存中,数组存储在连续的区域内部,因为数组中每个元素的类型相同,则占用的内存大小也一致,所以在访问数组中的元素时可以直接根据数组在内存中的起始位置以及下标来计算元素的位置,因此数组的访问速度很高。数组必须要初始化才能使用,初始化之后JVM会自动分配默认值,引用变量默认值是null。
数组和集合的区别:
1》数组初始化之后大小固定,无法再改变,集合大小可以改变。
2》同一个数组只能存储同一种数据类型(基本类型/引用类型).集合不考虑泛型可以存储多种数据类型,集合是存储对象的,所以基本类型不能放入集合,可以使用基本类型的包装类型。
3》若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。
数组和集合之间进行转化:
toArray():将集合转化为数组。
Arrays.asList():将数组转化为集合.
集合的体系结构
List、Set、Map是这个集合体系中最主要的三个接口。 List和Set继承自Collection接口。 Map也属于集合系统,但和Collection接口不同。
Set无序,不允许元素重复。HashSet和TreeSet是两个主要的实现类。Set 只能通过游标来取值,并且值是不能重复的。
List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。 ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的
Map 是键值对集合。其中key列就是一个集合,key不能重复,但是value可以重复。 HashMap、TreeMap和Hashtable是Map的三个主要的实现类。 HashTable 是线程安全的,不能存储
null
值 HashMap 不是线程安全的,可以存储
null
值
------------| Collection 单例集合的根接口
----------------| List 如果是实现了List接口的集合类,具备的特点: 有序,可重复。
-------------------| ArrayList ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
-------------------| LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
-------------------| Vector(了解即可) 底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
----------------| Set 如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
-------------------| HashSet 底层是使用了哈希表来支持的,特点: 存取速度快.
-------------------| TreeSet 如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。
Collection接口的方法:
int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); Object[] toArray(); boolean add(E e); boolean remove(Object o); boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); boolean removeAll(Collection<?> c);
void clear();
http://blog.csdn.net/qq_33642117/article/details/52040345 set的讲解
http://blog.csdn.net/qq_33642117/article/details/52049764 map的讲解