Java集合与数组
1.Java2提供了一 个完整的集合框架,而Java的早期版本只提供了一些集合类,如Hashtable和Vector,以及内建的数组功能。
2.组成集合框架的类和接口是java.util包的成员,Arrays类提供了用于操作数组的static方法,Aarrys类的方法包括用于查找的binarySearch方法,用于比较数组的equals方法,用于给数组赋值的fill方法,以及排序的sort方法和asList方法。另外对Arrays类中的对象进行排序,对象必须实现Comparable接口的compareTo方法
3.Size方法得到List中元素的个数,get得到List中取出第一个元素
4.Collection接口是集合层次结构中的根接口,Set接口和List接口都是从Collection接口中派生出来的,Collection接口包含了在集合中添加,清除,比较和保持对象的大规模操作。Collection接口提供了iterator方法得到Iterator。
5.Collections类提供了许多操作集合的static方法,其中许多方法实现用于查找和排序等爱猫扑.爱生活。
6.List是一个能包含重复元素的已排序的Collection,有时候List也称为序列,List接口由ArrayList类,LinkedList类和Vector实现的,ArrayList是List可变数组的实现,类似Vector类的行为和功能,LinkedList则是List的链表实现。
7.iterator的hasNext方法卸螩ollection是否还含有另外一个元素,如果还有,则hasNext方法返回true,next方法返回Collection中的下一个对象并移动到下一个元素。
8.subList得到List的一部分,这一部分被称为子表,对子表的修改都会影响到List,clear方法从List中删除元素,
9.toArray方法以数组的形式返回集合中的内容。
10.Comparator对象提供一种排序方式,可以按不同Colletion自然顺序的顺序对Collection的元素排序,reverseOrder方法返回一个Comparator对象,它代表了集合的逆转排序。也可以实现你自己的排序方法,前提是实现Comparator接口,并实现Comparator接口的compare方法
11.Shuffle算法对list中的元素进行随机排序,binarySearch算法在List中查找一个Object
12.Set是不包含重复元素的Collection,集合框架含有Set的两种实现方式:HashSet和TreeSet,HashSet把他的元素存储在哈希表中,而TreeSet则把他的元素存储在树中。
13.SortedSet接口扩展了Set并按排好的顺序维护了它的元素,TreeSet类实现了它。
14.headSet方法得到TreeSet中小于一个指定元素的子集,对这一子集的修改都会反映在TreeSet中,tailSet方法得到大于或等于指定元素的子集,同样对它的修改都会反映在TreeSet中。
15.Map把键映射到值并不包含重复的键,Map和Set的不同之处在于Map包含键和值,而Set只包含键,HashMap和TreeMap类实现了Map接口,HashMap把他的元素存储在哈希表中,而TreeMap则把他的元素存储在树中。
16.SortedMap接口扩展了Map并按排好的顺序维护了它的元素,TreeMap类实现了它。
17.内建的集合都是异步的,多线程对Collection的并发访问可能导致不确定的结果,为了防止这个问题,可以在被多线程访问的类外面使用同步包装类,Collections类提供了一系列的static方法把集合转化成不可以修改的形式,当试图修改时,抛出异常。
Public static方法头文件:(同步)
Collection synchronizedCollection(Collection c);
List synchronizedList(List c)
其他类似。。
Public static方法头文件:(不可以修改)
Collection unmodifiableCollection(Collection c);
List unmodifiableList(List c)
其他类似。。
集合框架提供了不同的抽象实现,程序员可以利用此来实现自己定义的实现!
18.数组和容器的区别主要有以下三点:效率,类型识别以及可以持有primitives
19.容器类保持的类型都是Object的,主要有三种 list ,set, map,容器的缺点主要是保存元素的时候,丢失元素的类型,使用元素的时候,必须进行类型转换
20 list的选择:
ArrayList随机访问的效率要比LinkList快,但是LinkList顺序访问的效率则高过ArrayList,另外LinkList在对元素进行插入和删除操作时要比ArrayList的效率高,二者的最佳选择方法是:首先选用ArrayList当发现“向元素中插入和删除操作太多时”引发性能问题时,换用LinkList,当然处理固定元素还是选用数组
21.set的选择:
HashSet的各项性能都要比TreeSet强,但是TreeSet的意义在于能顺序保存元素,因此只有在需要有顺序set时才用TreeSet;
LinkedHashSet的插入操作要比HashSet慢,主要是因为前者承担了链表和hash容器的双重代价,由于链表的缘故LinkedHashSet的遍历则要比 HashSet快
22.Map的选择:
HashMap的效率和HashTable差不多,一般来说HASHMAP要稍快,HASHMAP是用来取代HASHTABLE的,TREEMAP的效率要比HAHSMAP低,但是TREEMAP由于是树结构,所以是有序的,因此不需要进行排序操作,如果不需要恒定有序的MAP时,一般来说首选HASHMAP,LINKEDHASHMAP比HASHMAP要慢,因为除了保存HASH容器外还有保存链表,IDENTITYHASHMAP没有办法和上叙MAP比较,它用的是==来比较两个对象的相等性,而不是equals()
23.所有hash类容器持有的对象必须覆盖hashcode和equals方法