黑马程序员--java集合框架

---------------------- android培训java培训、期待与您交流! ----------------------


1.集合框架有什么用?
   集合和数组比较像,但是有很大的区别。
   数组的长度在初始化时就定下来了,不可变。那么以后如果项目需求改变,原本需要10个学生信息,现在要20个,那怎么办?
   所以就引出了集合


   java中集合框架体系图
   


2.如何使用集合类?
   对于对象集合,必须执行的操作主要以下三种:
   *添加新对象 
   *删除对象
   *查找对象
   
   Collection接口是一组允许重复的对象
   Set接口继承Collection,但不允许重复,使用自己内部的一个排序机制
   list接口继承Collection,允许重复,元素按插入的次序来放置元素,不会重新排序
   Map接口是一组成对的键-值对象所持有的是key-value,Map中不能有重复的key,拥有自己的内部排序机制。
   容器中元素类型都为Objext,从容器取的元素时,必须把他转换成原来的类型
   
  collection接口:
  用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口
  boolean add(Object o)://将对象添加给集合
  boolean remove(Object o)://如果集合中又与o相匹配的对象,则删除对象o
  int size(); //返回当前集合中元素的数量
  boolean isEmpty();//判断集合中是否有任何元素
  boolean contains(Object o); //查找集合中是否含有对象o
  Iterator iterator(); //返回一个迭代器,用来访问集合中的各个元素
  boolean addAll(Collection c); //将集合c中所有元素添加给该集合
  void retainAll(Collection c); // 从集合中删除集合c中不包含的元素
  Object[] toArray(); //返回一个内含集合所有元素的array。运行期返回的array和参数a的型别相同,需要转换为正确类别。


  
   List接口:
   void add(int index,Object element): //在指定位置index上添加元素element
   boolean addAll(int index,Collection c); //将集合c的所有元素添加到指定位置index 
   Object get(int index); //返回List中指定位置的元素
   int lastIndexOf(Objecto);//返回最后一个出现元素o的位置,否则返回-1
   int indecOf(Object o); //返回第一个出现的元素o的位置,否则返回-1
   Object romove(int index); //删除指定位置上的元素
   Object set(int index,Object element);//用元素element取代位置index上的元素,并且返回旧的元素
  
   LinkedList类和ArrayList类
   在集合框架中又两种常规的List实现:ArrayList和LinkedList,使用两种List实现的哪一种取决于您特定的需要,如果要支持随机访问,而不必再除尾部的任何位置或除去元素,那么ArrayList提供了可选的集合,但如果,您要频繁的从列表的中间删除和去除元素,而值要顺序的访问列表元素,那么LinkedList实现更好
   LinkedList类:
   void addFirst(Object o); // 将对象p添加到列表的开头
   void addLast(Object o); // 将对象o添加到列表的结尾
   Object getFirst(); //返回列表开头的元素
   Object removeFirst(); //删除并且返回列表开头的元素
   Object removeLast(); //删除并且返回列表结尾的元素
   LinkedList(); //构建一个空的链接列表
   ArrayList类:
   ArrayList类等装了一个动态再分配的Object[]数组。每个ArrayList对象又一个capacity。这个capacity表示存储列表中元素的数组的容量。当元素添加到ArrayList时,它的capacity在常量时间内自动增加。
   在向一个ArrayList对象添加大量元素的程序中,克使用ensureCapacity方法增加capacity。这可以减少增加重分配的数量
   void ensureCapacity(int minCapacity)://将ArrayList对象容量增加minCapacity
   void trimToSize(); //整理ArrayList对象容量为列表当前大小,程序可使用这个操作减少ArrayList对象存储空间
   
   Set接口:
   set接口继承Collection接口,而且让不允许集合汇总存在重复项,每个具体的set实现类一栏添加的对象的equals方法来检查独一性,set接口没有引入新方法,所以set就是一个collection,只不过其行为不同。
   
    HashSet类:
    HashSet();//构建一个空的哈希集
    HashSet(Collection c); //构建一个哈希集,并添加集合c中所有元素
    HashSet(int initialCapacity); //构建一个拥有特定容量的空哈希集 
    HashSet(int initialCapactity); //构建一个拥有特定容量的空哈希集 
    HashSet(int initialCapacty,float loadFactor);//构建一个拥有特定容量和加载因子的空和哈希集。LoadFactor是0.0至1.0之间的一个数
    
    TreeSet类:
    reeSet();//构建一个空的树集
    TreeSet(Collection c);//构建一个树集,并且添加集合c中所有元素
    TreeSet(Comparator c); //构建一个树集,并且使用特定的比较器对其元素进行排序
    TreeSet(SortedSet s); //构建一个树集,添加有序集合s中所有元素,并且使用与有序集合s相同的比较器排序
    
    Map接口:
    Map接口不喝死Collection接口的继承,Map接口用于维护键-值(key-value),该接口描述了不重复的键到值的映射
    Object put(Object key,Object value);//将互相关联的一个关键字与一个值放入该映像,如果该关键字已经存在,那么于此关键字相关的新值将取代旧值。方法返回关键字的旧值,如果关键字原先并不存在,则返回null
    Object remove(Objet key);//从映像的所有元素添加给该映像
    void clear(); // 从映像中删除所有映像
    “键和值都可以为null,但是,您不能把Map作为一个键或值添加给自身”
    Object get(Object key);//获得与关键字key相关的值,并且返回关键之key相关的ui,如果没有在该映像中找到该关键字,则返回null
    boolean containsKey(Object key);//判断映像中是否存在关键字key
    bolean containsValue(Object value);//判断映像中是否存在值value
    int size();//返回当前映像中映射的数量
    boolean isEmpyt();// 判断映像中是否有任何映像
    Set keySet();//返回映像中所有关键字的视图集
    
   Map.Entry接口:
   Mpa的entrySet()方法返回一个实现Map.Entry接口的对象集合,集合中美国对象都是狄成Map中一个特定的键-值对。
   通过这个集合的迭代器,可以获得每一个跳么的键或值并对值进行更改,当条目通过迭代器返回后,除非是迭代器自身的remove()方法或者迭代器返回的跳么的setValue()方法,其余对源Map外部的修改都会导致此条目集变得无效,同时产生条目行为未定义。
   Object getKay();//返回条目的关键字
   Object getValue();//返回条目的值
   Object setValue(Object value);//将相关影响中的值该为value,并且返回旧值
  
   HashMap类和TerrMap类
   “集合框架”提供两种常规的Map实现:HashMap和TreeMap实现。在Map中插入、删除和定位元素,HashMap是最好的的选择,但如果您要按自然顺序或自定义顺序遍历键,那么Tree会更好,使用HashMap要求添加的键类明确定义了HashCode()和equeals()实现
 
    这个TreeMap没有调优选择,因为该树总处于平衡状态
  
    HashMap类
    为了优化HashMap空间的使用,可以调优初始容量和负载因子。
    HashMap();//构建一个空的哈希映像
    HashMap(Map m);//构建一个哈希映像,并且添加映像m的所有映像
    HashMap(int initialCapacity);//构建一个拥有特定容量的空的哈希映像
    HashMap(int initialCapacity,float loadFactor);//构建一个拥有特定容量的加载影子的空的哈希映像
    
    TreeMap类
     TreeMap没有调优选项,因为该树总处于平衡状态
    TreeMap();//构建一个空映像树
    TreeMap(Map m);//构建一个映像数,并且使用特定的比较器对关键字进行排序
    TreeMap(SortedMap s);//构建一个映像树,添加映像树s中所有映射,并且使用与有序映像s相同的比较器排序
    
   HashTble类
   实现一个哈希表,该哈希表将映射射到相应的值,任何null对象都可以用作键或值,为了成功地在哈希表中存储和获取对象,用作关键对象必须实现hashCode方法和equals方法
   add(key);//在哈希表汇总添加一个key键值对
   Remove(key);//在哈希表中取出某个key键值对
   Clear();//从哈希表中移除所有元素
   Contains(Key);//判断哈希表是否包含特定键key
   
   Hashcode方法:
   当向集合Set中增加对象时,首先集合计算要增加对象的哈希码,根据该值来得到一个位置用来存放当前对象,挡在该位置没有一个对象存在的话,那么集合set认为该对象在集合中不存在,直接增加进去,如果在该位置有一个对象的话,接着将准备增加到集合中的对象与该位置上的对象进行equals方法比较,如果该equals方法返回false,那么集合认为集合汇总不存在该对象,在进行一次散列,将该对象防到散列后计算出的新地址里,如果equals方法返回true,那么集合认为集合认为集合中已存在该对象了,不会再将该对象增加到集合中了
   重写equals方法的时候必须重写hashcode方法,如果一个类的两个对象,使用equals方法比较时,结果为true,那么该两个对象具有相同的hashcode,原因是equals方法为true,表名是同一个对象,他们的hashcode当然相同
   Object类的hashcode方法返回的是Object对象的内存地址,可以通过integer.toHexString(new Object().HashCode);来得到
   


   Comparable接口
   Comparable接口使用与一个类欧自然顺序的时候,家丁对象集合是同一个类型,该接口允许您吧集合排序成自然顺序
   他的方法只有一个compareto()方法,用来比较当前实例和作为参数传入的元素,如果排序过程中当前实例和粗线在参数前,就返回某个负值,如果当前实例出现在参数后,则返回正直,否知,返回零,如果不要求返回值表示元素相等,零返回值可以只是表示两个对象在排序的时候排在同一个位置
   上面例子中的整型的包装类Integer就实现了该接口,我们可以看一下这个类的源码:
   public final class Integer extends Number implements
   {
public int compareTo(Object o){
return compareTo((Integer)o);
}
poublic int compareTo(Integer anotherInteger){
int thisVal = this.values;
int anotherVal = anotherInteger.value;
return (thisVal<anotherVal ? -1:(thisVal==anotherVal?o?1));
}
    }
   
   Comparator接口:
   若一个类不能用于实现java。lang。Comparable,或者不喜欢缺省的Comparable行为冰箱提供字的排序功能,可以实现Comparator接口,从而定义一个比较器。
   int compare(Object,Object o2)://对两个对象哦o1和o2进行比较,如果o1位于o2的前面,则返回负值,如果在排序顺序中认为o1和o2是相同的,返回0,如果o1位于o2的后面,则返回正值


   Iterator接口
   Collection接口的Iterator方法返回一个Iterator,Iterator接口方法能以迭代方式逐个访问集合中的元素,并安全的从Collection中出去适当的元素
   HashNext();//判断是否存在另一个可访问的元素
   Object next();//返回要访问的下一个元素,如果到达集合结尾,则抛出异常
   void remove();//删除上次访问返回的对象,本方法必须紧跟在一个元素的访问后执行,如果上次访问后集合已被修改,方法将抛出异常

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值