泛型,自己学习笔记
1. Collection接口:申明了一些操作集合中的元素的方法。它没有一个直接的子类 。但编程一般不会直接针对Collection。
但它提供了一些很常用的方法:
1) boolean add(E e);
2) boolean remove(Object o);
3) int size();
4) Iterator<E> iterator();
2. Set接口:不能存放重复元素的接口 (重复:两个对象equals相等)
在类中重写equals()和hashCode()方法 八种基本数据类型的包装类,String,Date,Calender都重写了着两个方法。
1)HashSet : 内部使用哈希表来存储元素 所以存取元素的效率最高 ,不保证元素的存放顺序。
2)LinkedHashSet: 采用散列表和双向链表来存储元素,所以他保证元素的存放顺序。效率比HashSet低。
3)TreeSet :
3. List接口:有序的列表,允许有重复的元素。
1)可以根据元素的索引来存取元素。
void add(int index,E element),
E get(int index),
E remove(int index),
ListIterator<E> listIterator()
2) 两个重要的实现类:
a) ArrayList :内部采用了数组结构来存取元素,根据索引来存取元素的效率很高。不适合频繁增删元素的情况。
b) LinkedList: 内问采用了双向链表来存储元素,增删效率比ArrayList高。但他的根据索引查询的效率很低。
4. Map接口:实现的是键/值对的存储
V put(K key, V value)
V get(Object key)
V remove(Object key)
int size()
视图:
1.Collection<V> values()//返回的是Collection接口,里面存放的是键值对的值
2.Set<K> keySet() //返回键值对中包含的键的集合用于循环遍历其中的key值
3.Set<Map.Entry<K,V>> entrySet() //返回的是map中存储的键值对对象(entry)的集合
实现类:
HashMap:应用Hash表来存储键值对中的键,根据键取查询对应的值,因此存储的键值对是无序的
存取效率高。
LinkedHashMap:内部用双向链表和哈希表来存储,键值对存放有序
5. 排序集合:
1)可排序的类必须实现comparable接口,在compareTo方法中定义比较规则
如果当前对象小于指定比较的对象,则返回负整数;
如果当前对象大于指定比较的对象,则返回正整数;
如果当前对象等于指定比较的对象,则返回0;
2)如果需要多种方式进行比较时,就应该是用比较器,比较器类要实现comparator接口
int compare(T o1,T o2){}
3) 排序集合有TreeSet和TreeMap
支持两种排序方式:
a.直接存入实现了comparable接口的对象
b.构造一个比较器compartor
6. 遗留集合
1)Vector
2) Stack
3) Hashtable
4) Properties是一个属性集,
a) 它的键和值都是字符串
b) 可以从文件流中加载键值对,也可以保存到文件流中,
使用是不建议使用 put() 和 get(),应该是用setProperty()和getProperty()
7. 集合工具类 Collections,所有的方法都是静态方法。
常用算法
1) public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
2) public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)
3) public static <T extends Comparable<? super T>> void sort(List<T> list)
4) public static void shuffle(List<?> list)
5) public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
同步处理
1) public static <T> Collection<T> synchronizedCollection(Collection<T> c)
2) public static <T> Collection<T> synchronizedSet(Set<T> c)
3) public static <T> Collection<T> synchronizedList(List<T> c)
4) public static <T> Collection<T> synchronizedMap(Map<T> c)
注意一点,如果使用迭代器迭代,还需要手工处理同步问题
List<String> list = ...
synchronized(list){
for(Iterator<String> it = list.iterator(); it.hasNext();){
it.next();
}
}
先到这里吧