List:特有方法。凡是可以操作角标的方法都是该体系特有方法。
增 add(index,element);addAll(index,Collection);
删 remove(index)
改 set(index,element);
查 get(index);subList(from,to);ListIterator
List集合特有的迭代器ListIterator
在迭代时,不能通过集合对象的方法操作集合中的元素,会发生并发异常。只能通过迭代器的方法操作。
List:元素是有序的,元素可以重复
|---ArrayList:底层是数组结构,特点:查询很快,增删稍慢,线程不同步
|---LinkedList:底层是链表结构,特点:查询稍慢,增删很快
|---Vector:底层是数组数据结构,线程同步,被ArrayList替代了。
Set;元素是无序的,元素不可重复
|--HashSet:底层数据结构是哈希表,线程不同步
HashSet是如何保证元素的唯一性呢?是通过两个方法 hashCode和equals来完成。
如果元素的hashCode相同,才会判断equals是否为true,如果哈希值不同,不会调用equals
|--TreeSet:底层数据结构是二叉树,可以对Set集合中的元素进行排序。
保证元素的唯一性的依据:compareTo方法return 0;
如何排序的第一种方法:让元素自身具备比较性。
实现接口Comparable,复写里面的compareTo方法,如果还有次要条件则继续compareTo比较,也称为自然排序。
第二种方法:当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。定义了比较器,并传给构造函数。定义一个类实现Comparator接口,覆盖compare方法。
这种方法比较常用。
当两种排序逗存在时,以比较器为主。
LinkedList:特有方法:
addFirst();
addLast();
getFirst();
getLast();
获取元素,但不删除元素
removeFirst();
removeLast();
获取元素,但是元素被删除
JDK1.6的方法:
offerFirst();
offerLast();
添加元素
peekFirst();
peekLast();
获取元素,但不删除元素,如果集合中没有元素,则返回null
pollFirst();
pollLast();
获取元素,但删除元素,如果集合中没有元素,则返回null
****List集合判断元素是否相同时,依据的是元素的equals方法。
泛型:好处,将运行时的ClassCastException,转移到了编译时期,方便于程序员解决问题,安全。避免了强制转换的麻烦。
泛型类:
class Utils<QQ>{
private QQ q;
public void setObject(QQ q){
this.q = q;
}
public QQ getObject(){
return q;
}
}
什么时候定义泛型类?当类中要操作的引用数据类型不确定的时候。
泛型方法定义:
public <T> void show(T t){
System.out.println("show:"+t);
}
**静态方法不可以访问类上定义的方法,(泛型随着对象的产生而出现)只能给方法上定义泛型
pubic static <W> voif method(W t){}
*****
?通配符。也可以理解为占位符
泛型的限定:
? extends E:可以接受E或者E类型的子类。上限。
? super E:可以接收E类型或者E类型的父类。下限。
***Map集合:该集合存储键值对,一堆一堆存,而且要保证健的唯一性。
1.添加 put(K,V);putAll(Map<? extends K,? extends V> m)
2.删除 clear();remove(Object key)
3.判断 containsValue(Object value);containsKey(Object key);isEmpty();
4.获取 get(Object key);size();values(); entrySet();KeySet();
|---HashTable:底层是哈希表数据结构,不可以存入null健null值。该集合是线程同步的。jsk1.0,效率低。
|---HashTable:底层是哈希表数据结构,允许存入null健null值。该集合是线程不同步的。jsk1.5,效率高。
|---TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的健进行排序。
只要往HashSet里面存,对象里面就需要复写hashCode(){return mane.hashCoed()+age*34}和
public boolean equals(Object obj){
if(!(obj instanceof Student))throw new ClassCastException("类型不匹配");
Student s = (Student)obj;
return this.name.equlas(s.name) && this.age==s.age;
} |
|