zoukankan      html  css  js  c++  java
  • java集合类小结

    1 集合的框架体系

    List简介

    集合的使用场合

    List(链表|线性表)和Set(集)

    java.util.Collection  
            ---| Collection     描述所有接口的共性  
                ----| List接口    可以有重复元素的集合  
                ----| Set  接口   不可以有重复元素的集合

    List的方法: 

    增加:  
            1:add() 将指定对象存储到容器中  
                          add 方法的参数类型是Object 便于接收任意对象  
            2:addAll() 将指定集合中的元素添加到调用该方法和集合中  
    删除:  
            3:remove() 将指定的对象从集合中删除  
            4:removeAll() 将指定集合中的元素删除  
    修改  
            5:clear() 清空集合中的所有元素  
    判断  
            6:isEmpty() 判断集合是否为空  
            7:contains() 判断集合何中是否包含指定对象  
                  
            8:containsAll() 判断集合中是否包含指定集合  
                                使用equals()判断两个对象是否相等    
    获取:           9:int size()    返回集合容器的大小  
      
    转成数组        10: toArray()   集合转换数组

    Set简介 

    1.它不允许出现重复元素;
    2.不保证集合中元素的顺序
    3.允许包含值为null的元素,但最多只能有一个null元素。

    HashSet

    按照哈希算法来存取集合中的对象,存取速度比较快。

    Set<String> set = new HashSet<String>();  
    	    for(int i= 0;i<6;i++){  
    	    	set.add(i+"");  
    	    }  
    	    set.add("3");       //重复数据,不会写入  
    	    set.add(null);      //可以写入空数据  
    	    Iterator<String> iter = set.iterator();  
    	    while(iter.hasNext()){  
    	    	System.out.println(iter.next());        //输出是无序的  
    	    }

    TreeSet
    TreeSet的特点是:

     1.不能写入空数据

     2.写入的数据是有序的。

     3.不写入重复数据

    Set<String> set1 = new LinkedHashSet<String>();  
    	    for(int i= 0;i<6;i++){  
    	        set1.add(i+"");  
    	    }  
    	    set1.add("3");       //重复数据,不会写入  
    	    set1.add(null);      //可以写入空数据  
    	    Iterator<String> iter1 = set1.iterator();  
    	    while(iter1.hasNext()){  
    	        System.out.println(iter1.next());        //输出是有序的  
    	    } 

    LinkedHashSet
    这个相对于
    HashSet来说有一个很大的不一样是LinkedHashSet是有序的。LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

    Set<String> set2 = new TreeSet<String>();  
    	    for(int i= 0;i<6;i++){  
    	        set2.add(i+"");  
    	    }  
    	    set2.add("3");       //重复数据,不会写入  
    	    //set.add(null);        //不可以写入空数据        
    	    Iterator<String> iter2 = set2.iterator();  
    	    while(iter2.hasNext()){  
    	        System.out.println(iter2.next());        //输出是有序的  
    	    }  

    Map详解 

    java中的map集合使用键(key)值(value)来保存数据,其中(value)可以重复,但(key)必须是唯一,也可以为空,但最多只能有一个key为空,它的主要实现类有HashMap、LinkedHashMap、TreeMap。

    Map方法:

     

    HashMap、LinkedHashMap、TreeMap区别及用法

    HashMap

    特点:保存元素时先进后出无序性;查询效率比较高;key-value可以为null,但最多只能为一个null;不支持线程同步,即可以有多个线程同时写HashMap,可能导致数据不一致,如果需要同步可以使用Collection的synchronizedMap方法使其同步。

    示例: 

    Map<String,String> map=new HashMap<String, String>();  
    		//使用put添加元素  
    		map.put("name","张三");  
    		map.put("sex","男");  
    		map.put("age","12");  
    		map.put("addres","深圳");  
    		map.put("iPhone","13068706819");  
    		//存放两个key-value为空的元素,打印时出现一个  
    		map.put(null, null);  
    		map.put(null, null);  

    LinkedHashMap
    特点:
    LinkedHashMap内部是双向链表结构,保存了元素插入的顺序Iterator遍历元素时按照插入的顺序排列,支持线程同步。

    代码:

    Map<String,String> map1=new LinkedHashMap<String,String>();  
    		//使用put添加元素  
    		map1.put("name","张三");  
    		map1.put("sex","男");  
    		map1.put("age","12");  
    		map1.put("addres","深圳");  
    		map1.put("iPhone","13068706819");  
    		map1.put(null, null); 
    		System.out.println("linkedhashmap元素按照插入的顺序排列:"+map1);

    TreeMap
    特点:保存元素
    key-value不能为null遍历元素时随机排列。

    代码:

    Map<String, String> map2 = new TreeMap<String, String>();  
    		map2.put("name", "张三");  
    		map2.put("sex", "男");  
    		map2.put("age", "12");  
    		map2.put("addres", "深圳");  
    		map2.put("iPhone", "13068706818");   
    		System.out.println("treemap元素随机排列"+map2);  

    HashTable 

    1)Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。

    2)Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。

    3)Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。

    public class HashTableTest {  
      
        public static void main(String args[]){  
            Hashtable<String, Integer> table = new Hashtable<String, Integer>();  
              
            //[1]添加元素  
            table.put("zhangsan", 22);  
            table.put("lisi", 33);  
            table.put("wangwu", 44);  
              
            //[2]toString()方式打印  
            System.out.println(table.toString());  
              
            //[3]Iterator遍历方式1--键值对遍历entrySet()  
            Iterator<Entry<String, Integer>> iter = table.entrySet().iterator();  
            while(iter.hasNext()){  
                Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>)iter.next();  
                String key = entry.getKey();  
                int value = entry.getValue();  
                System.out.println("entrySet:"+key+" "+value);  
            }  
              
            System.out.println("====================================");  
              
            //[4]Iterator遍历方式2--key键的遍历  
            Iterator<String> iterator = table.keySet().iterator();  
            while(iterator.hasNext()){  
                String key = (String)iterator.next();  
                int value = table.get(key);  
                System.out.println("keySet:"+key+" "+value);  
            }  
              
            System.out.println("====================================");  
              
            //[5]通过Enumeration来遍历Hashtable  
            Enumeration<String> enu = table.keys();  
            while(enu.hasMoreElements()) {  
                System.out.println("Enumeration:"+table.keys()+" "+enu.nextElement());  
            }   
                  
        }  
    }  

    构造函数

    // 默认构造函数。
    public Hashtable() 
    
    // 指定“容量大小”的构造函数
    public Hashtable(int initialCapacity) 
    
    // 指定“容量大小”和“加载因子”的构造函数
    public Hashtable(int initialCapacity, float loadFactor) 
    
    // 包含“子Map”的构造函数
    public Hashtable(Map<? extends K, ? extends V> t)

    Hashtable和HashMap到底有哪些不同呢

    1)基类不同:HashTable基于Dictionary类,而HashMap是基于AbstractMap。Dictionary是什么?它是任何可将键映射到相应值的类的抽象父类,而AbstractMap是基于Map接口的骨干实现,它以最大限度地减少实现此接口所需的工作。

    2)null不同:HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null。

    3)线程安全:HashMap时单线程安全的,Hashtable是多线程安全的。

    4)遍历不同:HashMap仅支持Iterator的遍历方式,Hashtable支持Iterator和Enumeration两种遍历方式。

     

    声明:灰常之不好意思,这篇文章参考了好几个博主君,我没记住,特此声明,灰常感谢!

  • 相关阅读:
    alpha版本冲刺总结
    近两天项目冲刺
    关于微软必应词典客户端 的案例分析
    第三次作业——结队编程
    hdu 1002 A + B Problem II(大数)
    ZOJ 3805 Machine(二叉树,递归)
    hdu 4704 sum(费马小定理+快速幂)
    欧拉图
    hdu 1116 Play on Words(欧拉通路)
    前50个斐波那契数
  • 原文地址:https://www.cnblogs.com/K-artorias/p/8073080.html
Copyright © 2011-2022 走看看