2 Java学习之 集合框架

1. 概念

        集合就是将若干用途相同、近似的“数据”结合成一个整体。
        集合从体系省分为三种:
  1. 列表(List) : List集合区分元素的顺序,允许包含相同的元素。
  2. 集 (Set) : Set集合不区分元素的顺序,不允许包含相同的元素。
  3. 映射(Map) : Map集合保存“键”-“值”对,“键”不能重复,一个“键”只能对应一个值。
          Java集合只能保存引用数据类型,也就是保存对象的地址,而非对象本身。

2. 类图关系

                                         

Collection 和 Collections的区别。  

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。  

Collection是个java.util下的接口,它是各种集合结构的父接口

List, Set, Map是否继承自Collection接口? List,Set是 Map不是  




3.Connection

      Connection接口中的方法:
  • int size();
  • boolean isEmpty();
  • boolean contains(Object o);
  • Iterator<E> iterator();
  • Object[] toArray();
  • boolean add(E e);
  • boolean remove(Object o);
  • boolean containsAll(Collection<?> c);
  •  boolean addAll(Collection<? extends E> c);
  • boolean removeAll(Collection<?> c);
  • boolean retainAll(Collection<?> c);
  •  void clear();
      Connection 方法举例:
         
     Collection c = new ArrayList();
		c.add("123");
		c.add(1);
		c.add(new Float(0.09f));
		System.out.println(c.size());// 结果 3
		System.out.println(c);       // 结果 [123, 1, 0.09]

  3.1 List接口

        list接口是Connection的子接口,存放的 对象是有顺序的,而且可以重复
        list容器存放的对象都有一个整数型的序号,记录改对象在容器中的位置,可以根据序号来访问容器中的元素。
        list接口的实现类是ArrayList、LinkedList。
  • E get(int index);
  • E set(int index, E element);
  • void add(int index ,E element);
  • E remove(int index);
  • List<E> subList(int fromIndex, int toIndex);
          3.1.1 Arraylist
              Java.util.Arraylist实现了list接口,用于描述可变类型长度数组列表( 底层采用数组实现);
          3.1.2 Vector
             Java.util.Arraylist实现了list接口,用于描述可变类型长度数组向量( 底层采用数组实现);
             与ArrayList的区别: Vector是线程安全的(同步),用在多线程环境中,运行效率慢;ArrayList不是线程安全的,用在单线程环境。
          3.1.3 Stack
            Java.util.Stack继承Vector,对应“ First in Last out”的数据结构-栈。

      ArrayList和Vector的区别。 
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
  



    3.2 Set 接口

           Set接口是Collection的子接口,set接口没有提供新的方法,但 实现set接口的容器中元素没有顺序,不能重复。
           3.2.1 HashSet
             
HashSet hs = new HashSet();   //可以求交集和并集
		hs.add("first");
		hs.add("second");
		hs.add("third");
		hs.add("fourth");
		hs.add("first");
		hs.add(new Date());
		System.out.println("哈希表的大小" + hs.size()); //哈希表的大小5
		System.out.println(hs);  //[fourth, Mon Jul 29 11:25:57 CST 2013, second, third, first]

          3.2.2 TreeSet
                  TreeSet描述set的一个变体- 可实现排序功能的集合
                  将对象插入TreeSet时,会按照某种比较规则将对象插入到一个有序序列中,以保证TreeSet对象序列按照“升序”排列。

  4. Map

             实现Map接口的类用来存放“键-值”对。可以理解为一张二维表,这个二维表有两列,一列为key,一列为value。 key不能重复。
             Map接口中常用的方法:
  • int size();
  • boolean isEmpty();
  • boolean containsKey(Object key);
  • boolean containsValue(Object value);
  • V get(Object key);
  • V put(K key, V value);
  • V remove(Object key);
       4.1.1 HashMap
            Java.util.HashMap实现了Map接口,基于哈希表实现了“键”-"值"对的映射关系。
            HashMap不确定"key"-"value"对的先后顺序, 允许key、value为null.
        
     4.1.2 HashTable
             同hashmap一致。

   HashMap和Hashtable的区别  
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 

二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 

三.值:只有HashMap可以让你将空值作为一个表的条目的key或value 

5. Collections类

       java.util.Collections类提供了一些 静态方法,实现了基于List容器的常用算法。
           void sort(List list);           对容器内的元素进行升序排列
           void reverse(List list);    对容器内的元素进行逆序排列
           void shuffle(List);           对List容器内的元素进行随机排序
           void fill(List list,Object obj);        用特定的对象填充list
           void copy(List des,List src);
           void binarySear(List list,Obj obj);   采用半折法查找obj对象

6. Arrays类

        java.util.Arrays类提供对数组进行操作的 静态方法,实现了对数组的查询、排序等功能。
        List asList(Object a[]);
        void sort(Object a[]);
        String toString(object a[]);
       int binarySearch(Object a[],Object key);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值