疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java 集合类Collection、List


 

 
Collection接口:
    1.集合可以理解为一个动态的对象数组,不同的是集合中的对象内容可以任意扩充。
        也就是说在集合当中的操作比较方便,容易添加或者删除
    2.集合的特点:
        性能高
        容易扩展和修改
        这也是为什么使用集合而不使用数组的主要原因
    3.Collection的常用子类
        List
        Set
        Queue
        这几个子类也是它比较常用的
 
接口Collection<E>
    所有超级接口:
        Iterable<E>
    所有已知接口:
        BeanContextBeanContextServices, BlockingDeque<E>, BlockingQueue<E>, Deque<E>, List<E>, NavigableSet<E>, Queue<E>, Set<E>, SortedSet<E> 
    
所有已知实现类:
AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayDeque, ArrayList, AttributeList, BeanContextServicesSupport, BeanContextSupport, ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, Stack, SynchronousQueue, TreeSet, Vector
    
public interface Collection<E>extends Iterable<E>
    Collection层次结构中的根接口。Collection表示一组对象,这些对象也称为collection的元素。一些collection允许有重复的元素,而另一些则不允许。一些collection是有序的,而另一些则是无序的。JDK不提供此接口的任何实现:它提供更具体的子接口(如Set和List)实现。此接口通常用来传递collection,并在需要最大普遍性的地方操作这些collection。
    包(bag)或多集合(multiset)(可能包含重复元素的无序collection)应该直接实现此接口。
    所有通用的Colelction实现类(通常通过它的一个子接口间接实现collection)应该提供两个“标准”构造方法:一个是void(无参数)构造方法,用于创建空collection;另一个是带有Collection类型单参数的构造方法,用于创建一个具有参数相同元素新的collection。实际上,后者允许用户复制任何collection,以生成所需实现类型的一个等效collection。尽管无法强制执行此约定(因为接口不能包含构造方法),但是Java平台库中所有通用的Collecion实现都遵从它。
    此接口中包含的“破坏性”方法,是指可修改其操作的collection的那些方法,如果此collection不支持该操作,则指定这些方法抛出UnsupportedOperationException。如果是这样,那么在调用对该collection无效时,这些方法可能,但并不一定抛出UnsupportedOperationException。例如,如果要添加的collection为空且不可修改,则对该collection调用addAll(Collection)方法时,可能但并不一定抛出异常。
    一些collection实现对它们可能包含的元素有所限制。例如,某些实现禁止null元素,而某些实现则对元素的类型有限制。试图添加不合格的元素将抛出一个未经检验的异常,通常是NullPointerException或ClassCastException。试图查询是否存在不合格的元素可能抛出一个异常,或者只是简单地返回false;某些实现将表现出前一种行为,而某些实现则表现后一种。较为常见的是,试图对某个不合格的元素执行操作且该操作的完成不会导致将不合格的元素插入collection中,将可能抛出一个异常,也可能操作成功,这取决于实现本身。这样的异常在此接口的规范中标记为“可选”。
    由每个collection来确定其自身的同步策略。在没有实现的强烈保证的情况下,调用由另一进程正在更改的collection的方法可能会出现不确定行为;这包括直接调用,将collection传递给可能执行调用的方法,以及使用现有迭代器检查collection。
    Collections Framework 接口中的很多方法是根据equals方法定义的。例如,contains(Object o)方法的规范声明:“当且仅当此collection包含至少一个满足(o==null ? e==null:o.equals(e))的元素e时,返回true。”不应该将此规范理解为它暗指调用具有非空参数o的Collection.contains方法会导致为任意地e元素调用o.equals(e)方法。可随意对各种实现执行优化,只要避免调用equals即可,例如,通过首先比较两个元素的哈希码。(Object.hashCode()规范保证哈希码不相等的两个对象不会相等)。较为常见的是,各种Collections Framework 接口的实现可随意利用底层Object方法的指定行为,而不管实现程序认为它是否合适。
    此接口是 Java Collections Framework 的一个成员。
 
List接口:Collection的子接口
    1.List接口可以存放任何数据,而且在List接口中内容是可以重复的
    2.List接口常用子类:
        ArrayList  --JDK1.2推出之后,异步处理方式,性能高,属于非线程安全
        Vector     --JDK1.0推出,采用同步处理方式,性能低,属于线程安全
    3.常用操作:
        判断集合是否为空:boolean isEmpty()
        查找指定的对象是否存在:int indexOf(Object o)
 
package com.jikexueyuan.list;
 
import java.util.ArrayList;
import java.util.List;
 
public class ListDemo01 {
 
    public static void main(String[] args) {
        List<String> lists = null;
        lists = new ArrayList<String>();
        lists.add("A");
        lists.add("B");
        lists.add("A");
        for(int i=0; i<lists.size(); i++){
            System.out.println(lists.get(i));
        }
        lists.remove(0);
        System.out.println("删除之后:");
        for(int i=0; i<lists.size(); i++){
            System.out.println(lists.get(i));
        }
        System.out.println("集合是否为空:"+lists.isEmpty());
        System.out.println("B是否存在:"+lists.indexOf("B"));
        //indexOf(Object o)  返回类型:int  返回此列表中第一次出现的指定元素的索引;如果
        //此列表不包含该元素,则返回-1
    }
 
}
    
package com.jikexueyuan.list;
 
import java.util.List;
import java.util.Vector;
 
public class ListDemo02 {
 
    public static void main(String[] args) {
        List<String> lists = null;
        lists = new Vector<String>();
        lists.add("A");
        lists.add("B");
        for (int i = 0; i < lists.size(); i++) {
            System.out.println(lists.get(i));
        }
    }
 
}
        
 
 
Set接口:
    1.Set接口中不能加入重复元素,但是可以排序。
    2.Set接口的常用子类
        散列存放:HashSet
        有序存放:TreeSet
    
 
package com.jikexueyuan.list;
 
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
 
public class SetDemo01 {
 
    public static void main(String[] args) {
        Set<String> s = null;
        s = new HashSet<String>();
        s.add("B");
        s.add("A");
        s.add("C");
        s.add("D");
        s.add("E");
        s.add("F");
        System.out.println(s);
//      s = new TreeSet<String>();
//      s.add("B");
//      s.add("A");
//      s.add("C");
//      s.add("D");
//      s.add("E");
//      s.add("F");
//      System.out.println(s);
    }
 
}
 
 
Iterator接口:
    1.集合输出的标准操作:
        标准做法,使用Iterator接口
    2.操作原理:
        Iterator是专门的迭代输出接口,迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出
    3.注意事项:
        在迭代输出的同时,不能通过集合进行remove操作
package com.jikexueyuan.list;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
public class IteratorDemo01 {
 
    public static void main(String[] args) {
        List<String> lists = new ArrayList<String>();
        lists.add("A");
        lists.add("B");
        lists.add("C");
        lists.add("D");
        lists.add("E");
        lists.add("F");
        Iterator<String> iter = lists.iterator();
        while (iter.hasNext()) {
            String str = iter.next();
            if ("A".equals(str)) {
                iter.remove();
            }else{
                System.out.println(str);
            }
        }
    }
     
}
 
 
 
Map接口
    1.保存形式:
        key----->value的方式保存(键值对方式保存,通过key来找到value)
        例如:小明:13433321122(通过名字找到电话号码)
    2.常用子类:
        HashMap:无序存放,key不允许重复
        Hashtable:无序存放,key不允许重复
            在以Map接口存放数据的时候key都是唯一的。