集合类

来源:互联网 发布:javascript教程 正则 编辑:程序博客网 时间:2024/06/14 15:09
Collection:单值保存最大的父接口。
list:允许重复,元素有序(动态数组)。
1.ArrayList
2.vector
3.ArrayList和vector区别:
     ArrayList采用异步处理方式,性能更高,非线程安全。
     vector采用同步处理方式,性能相对较低,但线程安全。
4.ArrayList 常用方法:
add(Object obj)  
void add(int index,Object obj):在指定的索引位置index添加元素obj.
Object get(int index):获取指定索引的元素.
Object remove(int index):删除指定索引的元素.
Object set(int index,Object obj):设置指定索引位置的元素位obj.
int indexOf(Object obj):返回 obj 在集合中第一次出现的位置,如果没有,返回-1.
int lastIndexOf(Object obj):返回 obj 在集合中最后一次出现的位置,如果没有,返回-1.
List subList(int fromIndex,int toIndex):返回从fromIndex到toIndex结束的 左闭右开 的List.
set:无序,不允许重复。
HashSet:散列(无序)的方式保存集合数据。
TreeSet:排序存放。
HashSet:
  1.无序:无序 != 随机,指的是元素在底层储存顺序是无序的.
  2.不可重复:当像set添加重复元素时,后面的元素不能添加进去.
  说明:要求添加进 set元素所在类必须重写equals和hashcode方法.
LinkerHashSet:
       1.使用链表维护了我们添加进集合中的顺序,导致我们遍历集合元素时是按照添加进去的顺序遍历的!
       2.也是按照hashCode值来决定元素的储存位置的,同时维护了元素的次序.
       3.LinkerHashSet的性能略低于hashSet,但在迭代访问set里面的元素时却有很好的性能.
       4.同样LinkerHashSet里面不允许有重复的元素.
TreeSet:
  1.向TreeSet添加的元素必须是同一个类的.
 2.可以按照添加进集合的指定顺序遍历,比如,string,包装类,默认从小到大排序.
 3.当向TreeSet中添加自定义类时,有两种排序方法:
 1).自然排序:要求定义的类实现java.lang.ComparableTo(Object obj)接口并重写compareTo()抽象方法.
 2).定制排序:
public void treeSet2(){//创建一个实现comparator接口的类对象Comparator com = new Comparator(){//向TreeSet中添加Student对象,在此compare中指明按照Student哪个属性排序@Overridepublic int compare(Object o1, Object o2) {if(o1 instanceof Student && o2 instanceof Student){Student s1 = (Student)o1;Student s2 = (Student)o2;int i = s1.getAge().compareTo(s2.getAge());//当age相同时,按照name排序if(i == 0){return s1.getName().compareTo(s2.getName());}return i ;}return 0;}};//将此对象作为形参传给 TreeSet 构造器TreeSet set = new TreeSet(com);//添加元素set.add(new Student("AA",15));set.add(new Student("DD",52));set.add(new Student("GG",15));set.add(new Student("MM",22));for (Object i : set) {System.out.println(i);}}

4.向TreeSet中添加元素时首先按照compareTo()进行比较,一旦返回0,虽然仅是两个对象的该属性值相同,但是程序会认为这两个对象是相同的进而,后一个对象不能添加进来.
Map:具有映射关系 "key - value" 的集合。
1.HashMap:
 1.key 是用set存放的不可重复,value是用collection存放的,可重复,一个key-value对,是一个Entry,所有Entry是用set存放的
 2.向HashMap 中添加元素会调用key所在类的equals()方法,,判断两个元素是否相同,后添加的元素会替换掉先前的元素
2.Hashtable:古老的实现类,线程安全,不建议使用,但是常用他的子类Properties来处理属性文件,键和值都是String类型的.
        public void test2() throws FileNotFoundException, IOException{Properties pro = new Properties();pro.load(new FileInputStream(new File("db.properties")));String user = pro.getProperty("user");String password = pro.getProperty("password");System.out.println(user+"  "+password);}


3.LinkedHashMap:使用链表维护添加进Map中顺序,故遍历Map时是按照添加进去的顺序遍历的.
4.HashMap 和 Hashtable 的区别:
HashMap: 采用异步处理方式,性能更高;非线程安全‘允许将key或value设置为null。
Hashtable:采用同步处理方式,性能相对较低;线程安全;不允许出现null,否则出现指向异常。
集合遍历
1.迭代器:
Collection coll = new ArrayList();
coll.add(...);
Iterator it = coll.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
2.增强 for 循环遍历集合 foreach:
Collection coll = new ArrayList();
coll.add(...);
for(Object i:coll){
System.out.println(i);
}       3.Map遍历方式:            
                //方式一:Set set1 = map.keySet();System.out.println("key--value对:");for (Object object : set1) {System.out.println(object+"-->"+map.get(object));}//方式二:Set set2 = map.entrySet();for (Object obj : set2) {Map.Entry obj1 = (Map.Entry)obj;System.out.println(obj1);}


Collections:对Collection和Map操作的工具类,里面包含很多对集合操作的方法。