java中的集合

1.对象多了用集合存,数据多了用数组存,集合也是一种容器。
集合只存储对象,对象类型可以不同,长度不唯一。
集合框架:顶层Collection(参阅顶层,创建底层)
出现许多不同子容器:因为每一个容器对数据的存储方式不同。[存储方式称为:数据结构.]
2.Collection中共性方法:add方法参数类型是Object。可以接受任意类型。
  A【集合中存放的对象的引用、地址】
  迭代器:iterator是集合取出元素的方式。
3.Collection
   --List:元素有序(存入),元素可以重复。该集合体系有索引(可以强转为String.)
     --ArrayList:底层使用数组(指针)结构。特点:查询(修改)速度快,增删慢。线程不     同步。(不断new50%新数组实现长度的可变)
     【ArrayList集合判断元素是否相同、删除元素,依据的是Object equals方法。】
     --LinkedList:底层使用链表(链接)数据结构。特点:增删速度很快,查询慢。
     --Vector:底层使用数组(指针)结构。线程同步,被ArrayList替代(不断new100%新数   组实现长度的可变)Vector支持枚举。
   --Set:元素无序(存入和取出顺序不一样),元素不可以重复。方法和collection相同
     只能Iterator取出。
     --HashSet:数据结构哈希表。线程不同步按Hash值顺序(元素对象无序)存。
(地址值相同,内容不能相同。存储哈希值,哈希值不同则存储在不同位置,哈希值相同则判断是否同一对象,不为一个对象则顺延)
     保证唯一性原理:HashCode对于判断元素是否存在以及删除等操作是通过元素的HasCode和equals方法实现,如果HasCode相同才判断equals是否为true。如果HasCode不同则不会调用equals。
     --TreeSet:可以对Set集合中的元素排序(自然顺序、默认顺序)。
       底层数据结构二叉树排序(左小右大)
       保证唯一性原理:compareTo返回值为0.
       TreeSet排序的第一种方式:让元素自身具有比较性。(元素需要实现comparable接口,覆盖compareTo方法)
       【TreeSet排序的第二种方式:元素自身不具有比较性时,或具备的比较性不是所需要的,需要使用比较器(comparator)让容器自身具备比较性。将比较器作为对象传递给TreeSet集合的构造函数。】
        两种排序都存在时,以比较器为主
        比较器使用方法:实现comparator接口,覆盖compare方法。      


  List:
     特有方法:凡是可以操作角标的方法都是该体系特有的方法。
    增:add(int index,E element)  addAll( index,Collection)
    删:remove(int index)
    改:set(int index,E element)
    查:subList(int fromIndex,int toIndex) get(index) listIterator(int index)
 List 特有的迭代器是ListIterator是Iterator的子接口。
      迭代时,不可以通过集合对象的方法操作集合中的元素。(迭代和集合不可以同时访问)
      迭代器只能用迭代方法完成操作。ListIterator可以完成对集合的增添删改。
4.LinkedList:特有方法:


addFirst();addLast(); //增加元素
getFirst();getLast();//获取元素,但不删除元素。如果集合没有元素出现NoSuchElementException(没有这个元素异常)。
removeFirst(); removeLast();//获取元素,删除元素。如果集合没有元素出现NoSuchElementException(没有这个元素异常)。
新版本(JDK 1.6)出现了各个替代方法。
offerFirst();offerLast();
peekFirst();peekLast();//获取元素,但不删除元素。如果集合没有元素返回null
pollFirst();pollLast();//获取元素,删除元素。如果集合没有元素返回null
5.ArrayList传入对象比较时调用Object equals方法。判断元素相等用contains方法。
6.泛型:类型安全机制。  (泛型接口.......)
   使程序变安全,避免了强转(规定了类型);
   泛型格式:通过<>定义要操作的引用数据类型。
   当类中要操作的引用数据类型不确定时,定义泛型来完成扩展。
   类中(集合)产生方法类型明确,方法一样的类型。
   泛型限定:用于泛型扩展。     <?>?为通配符占位符。
   泛型限定:<? extends E>可以接收E类型或者E的子类型。上限
             <? super E>可以接收E类型或者E的父类型。下限
7.泛型方法:让不同的方法可以操作不同的类型,类型不确定,定义泛型方法
   泛型方法格式:定义在方法时放在返回值前面(注:类是泛型,类里面静态方法也是泛型)
    public static<Q> void print(Q q){}


8.Map集合(存储键值对,一对一对往里存,保证键的唯一型。)
      --Hashtable
        --底层hash表数据结构,不能存储null键null值。线程同步(低效)
      --HashMap
        --底层hash表数据结构,并允许使用 null 值和 null 键。线程不同步(高效)
      --TreeMap
        -- 底层数据结构二叉树,线程不同步,可以给map集合键进行排序。
 set底层用了map集合。
  <1、添加:
       put(K key, V value)
       putAll(Map<? extends K,? extends V> m)
  <2、删除:
       clear()
       remove(Object key) 
  <3、判断: 
       containsKey(Object key) 
       containsValue(Object value)
  <4、获取:
        get(Object key)
        size() 
        values() 
        keySet()map中所有的键存入到Set集合(返回Set<K>)
        entrySet() map中所有映射关系键、值存入set集合中(返回Set<Map.Entry<K,V>>)
        关系类型是Map.Entry。Map.Entry接口是Map的子接口。
9.Map集合取出原理:将map集合转成set集合,再通过迭代器取出
10.数据之间存在映射关系时,就要先想到Map集合
11.集合框架工具类:collections。
   Collections.sort(,new ?());// 排序,新建一个实现comparator接口重写 compare方法的类(?)可按照设计者意愿排序
   Collections.max();//获取最大值
 Arrays用于操作数组的工具类。

可变长度参数的方法public static void ca(int a;String...q)

 代码部分:

public class Collection1 {


/**
* @param args
*/


public static void main(String[] args) {
//method();
method_get();
}

@SuppressWarnings("rawtypes")
//对集合的各类操作
public static void method(){
ArrayList<Comparable> al = new ArrayList<Comparable>();
al.add("ak-47");// add(Object obj);接收Object类型
al.add("m4a1");
al.add("an84");
al.add(2);

ArrayList<Comparable> a2 = new ArrayList<Comparable>();
a2.add("m4a1");
a2.add(2);
a2.add(9);
// 原来集合
Print("移除前=" + al);
// Print("size="+al.size());

// 删除元素
al.remove("an84");
Print("移除后=" + al);


// 判断元素是否存在
Print("contain=" + al.contains(2));


// 判断是否为空
Print("空集=" + al.isEmpty());


// 取交集
al.retainAll(a2);// 前者(al)中只保留和后者(a2)相同的元素;
Print("取交集后al=" + al);
Print("a2=" + a2);
Print("----分割线----");

// 移除全部
a2.removeAll(al);
Print("al=" + al);
Print("删除所有的al后a2=" + a2);
}

@SuppressWarnings({ "rawtypes"})
public static void method_get(){
ArrayList<Comparable> al = new ArrayList<Comparable>();
al.add("ak-47");// add(Object obj);接收Object类型
al.add("m4a1");
al.add("an84");
al.add(2);

  //while方法占用内存
 Iterator it=al.iterator();//Iterator获取迭代器,用于取出集合中的元素
   while(it.hasNext()){//it.hasNext()返回值只有真和假。
Print(it.next());}//it.next() 获取迭代器当前内容

  //for方法比较省内存(Iterator是局部变量)
for (Iterator it1=al.iterator();it1.hasNext() ;) {
Print(it1.next());
}
}

   // 超类打印函数
public static void Print(Object obj) {
System.out.println(obj);
}

}

posted @ 2016-06-03 18:07  瑞阿伦  阅读(191)  评论(0编辑  收藏  举报