集合:collection 在util包中
集合中存放的是对象。
Collection
List: ArrayList, LinkedList, Vector 元素有序不可重复
Set:HashSet, TreeSet 元素无序不能重复
1,List:特有的方法,凡是可以操作角标的方法多少它特有的方法。
add(index, element);
addAll(index, Collection);
remove(index);
set(index, element);
get(index);
subList(from, to);
listIterator();
indexOf(对象);
subList(start, end);
特有的迭代器ListIterator是Iterator的子接口。
List中对象的比较使用的是equals方法。
contains,remove底层调用的也是equals方法。
HashSet:底层数据结构是哈希表
HashSet保证元素唯一性的两个方法:
如果元素HashCode相同,判断equals是否为true
如果元素hashCode值不同,则不会调用equals。
2,TreeSet,读取元素时是排序的。
底层数据结构是二叉树,保证元素唯一性的依据是compareTo的返回值。
方法一,元素需要实现Comparable接口,覆盖compareTo方法。
class Student implements Comparable
{
public int compareTo(Object obj)
{
if (!(obj instanceof Student))
{
throw new RuntimeException("jllajl");
}
Student s = (Student)obj;
if (this.age > s.age)
{
return 1;
}
if (this.age == s.age)
{
return(this.name.compareTo(s.name));
}
return -1;
}
}
方法二,元素不具备比较性或不是所需的时。这时需要集合自身具有比较性。定义比较器。当两种比较方式都存在时,比较器为主。
class MyCompare implements Comparator
{
public int compare(Object o1, Object o2)
{
Student s1 = (Student)o1;
Student s2 = (Student)o2;
int num = s1.getName().compareTo(s2.getName());
if(num==0)
return return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge());
return num;
}
}
TreeSet ts = new TreeSet(new MyCompare());//这里就传入了比较器。
泛型:JDK1.5以后出现。是一个安全机制。
<>内添加类型的限制。解决集合的不安全问题,因为集合可以接受任何的类型。
什么时候使用泛型呢?通常在集合中进行限定。
泛型可以定义在类上,这样整个类内的功能都是用同一种类型。
泛型也可以定义在函数上,一个类内也就可以有多个泛型了。
如:public <T> void show(T t){}
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
还有一方法,限定泛型应用的类型范围,这样写<>内。
public static void printColl(ArrayList<? extends Person> a1){}
<? super E>这样限制下限,E及E的父类。
3,Map集合:
|--Hashtable 不可以存null 键值对,同步
|--HashMap 运行存null键值对,线程不同步
|--TreeMap二叉树结构,线程不同步
<K, V> 键值对,保证key的唯一性。
clear();
containsValue(Object value);
containsKey(Object key);
get(Object key);
values();
put(k,value);
remove(Object key);
isEmpty();
size();
entrySet();
keySet();
Map集合的取出原理,用set集合存key,再取出对应的value。
4,Collections :它是一个集合类。
由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法,
sort();
max();
binarySearch();二分查找
fill();替换list中的元素
replaceAll();
reverseOrder()
swap();
shuffle();随机方式排放元素。
Collections集合类提供了线程安全的方法,
synchronizedList();
Arrays 是操作数组的工具类。里面很多静态方法。
asList();将数组转成list集合。不可以使用集合的增删方法,因为此时长度是固定的。
如果数组中的元素都是对象,那么变成集合时,数组中的元素直接转成集合中的元素。如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。这时可能就存数组名的地址。
增强for循环:只能获取,不能对集合操作。
相对于传统for循环,增强的for必须有被遍历的目标。
HashMap<Integer, String> hm = new HashMap<Integer, String>();
…..
Set<Integer> keyset = hm.keySet();
for(Integer i : keyset)
{
System.out.println(hm.get(i));
}
------
for(Map.Entry<Integer, String> me : hm.entrySet())
{
System.out.println(me.getKey() + me.getValue());
}
5,可变参数:(T… a)
静态导入: import static java.lang.System.*;那次后调用System成员方法时就不用加上System了。但有重名的方法时要指定是那个类的调用。