• java集合类的学习总结一


    概况总结

    首先,区分最顶层接口的区别:Collection和Map的区别:前者是单个元素;后者存储的是一对元素。Collection有List和Set两个子接口,两个子接口下分别有Vector和ArrayList以及HashSet和TreeSet等实现类;Map有HashMap、TreeMap、HashTable三种实现类。现分别总结它们的区别。

    一、在Collection下面,有Set和List两个接口继承了Collection,两者区别如下:

    List里面的元素是有游标的,因此它们是可以通过游标进行get相应的值,同时,由于游标的存在,内部的元素允许重复;与之对应的是Set,Set存储时是无顺序的(当然,treeSet会通过一定的顺序储存排列数据),因此内部元素之间不能重复。

    1、List下面的ArrayList、Vector、LinkedList三者的区别:

    a、Vector和ArrayList的区别:Vector是重量级的,不支持并发操作,数据操作时异步的,因此相对于ArrayList的消耗会更大;ArrayList与之对应,支持并发操作,线性不安全。因此,Vector和ArrayList的区别主要是:前者支持数据同步,后者支持多线程对数据操作。

    b、LinkedList与Vector和ArrayList的区别:LinkedList存储数据的方式是链表方式,而Vector和ArrayList是有顺序的队列形式,因此,他们主要的特点区别是:LinkedList相对于Vector和ArrayList而言,存储数据的速度更快,但是查找数据的速度较Vector和ArrayList慢。

    List测试代码模块

    (以ArrayList为例,Vector用法类似)

    import java.util.*;
    import java.lang.*;
    public class Demo_List{
    	//主方法
    	public static void main(String [] args){
    		Demo_List dl = new Demo_List();
    		List<String> lis = new Vector<String>();
    		//dl.test1(lis);
    		dl.testMethod1();
    	}
    	
    	public void testMethod1(){
    		List lis = new ArrayList();
    		//也可以这样声明,但是一般不这样,声明的时候一般声明为list,然后根据实际来new ArrayList和Vector;
    		//ArrayList lis = new ArrayList();
    		lis.add("我");
    		lis.add("ok");
    		lis.add(null);
    		lis.add(null);//list可以加入null值,而且可以重复加元素
    		System.out.println("加入null后的长度  = " + lis.size());
    		System.out.println("get个null值 =  " + lis.get(5));
          }
    }

      

    2、Set下面的HashSet和TreeSet的区别:HashSet中元素是无序的,元素不可重复,可以有null值;TeeSet元素以一定的顺序排列,但是不能保证是和元素add进去的顺序一样,同时,TreeSet不可重复,不可有null值。

    HashSet测试代码如下

    import java.util.*;
    public class DemoHashSet{
    	public static void main(String [] args){
    		DemoHashSet dht = new DemoHashSet();
    		dht.treeSet();
    	}
    	public void treeSet(){
    		HashSet hs = new HashSet();
    		hs.add("a");
    		hs.add("b");
    		hs.add("b");//虽然可以通过编译和没报错,但是size()的值是2,说明不能重复加
    		hs.add(null);//可以加入null值,输出的size()值是3
    		System.out.println(hs.size());	
    	}
    }
    

      

    TreeSet测试代码如下:

    import java.util.*;
    public class DemoTreeSet{
    	public static void main(String [] args){
    		DemoTreeSet dht = new DemoTreeSet();
    		dht.treeSet();
    	}
    	public void treeSet(){
    		TreeSet ts = new TreeSet();
    		ts.add("a");
    		ts.add("b");
    		ts.add("b");//虽然可以通过编译和没报错,但是size()的值是2,说明不能重复加
    		//ts.add(null);//报错NullPointException
    		System.out.println(ts.size());	
    	}
    }
    

    3、HashMap和HashTable以及TreeMap的区别:首先,三者均是实现Map接口的实现类,所以,在存储数据方面均是以一组数据的形式储存,每个数据包含Key和Value值。首先,要明确的是,在Map下面的实现类都是通过key值来映射对应的value值的,所以Key值都是唯一的。三者的主要区别主要表现在能否加null值,是否支持数据同步,值得储存是否有序。

    在HashMap中,key和value都可以是null,value值允许重复,不支持数据同步,即允许多线程操作数据

    在HashTable中,key和value均不能是null值,同时HashTable支持数据同步,线性安全。

    TreeMap插入的元素是有序的,key值不允许为空,value允许为空值

    以下是对TreeMap的测试代码

      

    import java.util.*;
    public class DemoTreeMap{
    	public static void main(String [] args){
    		DemoTreeMap dtp = new DemoTreeMap();
    		dtp.treeMap();
    	}
    	public void treeMap(){
    		TreeMap tm = new TreeMap();
    		tm.put("1","a");
    		tm.put("2","b");
    		tm.put("3",null);//value的值可以为null
    		tm.put("4",null);//vlue值可以重复
    		//tm.put(null,"c");//key值不能为空,抛出异常NullPointException
    		System.out.println("tm.size() = " + tm.size());
    	}
    }
    

      

    HashMap测试代码如下

    import java.util.*;
    public class Demo_HashMap{
    	
    	//主方法
    	public static void main(String [] args ){
    		Demo_HashMap dh = new Demo_HashMap();
    		dh.test_HashMap1();
    		//dh.test_HashMap2();
    	}
    	//定义测试方法
    	public void test_HashMap1(){
    		//定义
    		Map hm1 = new HashMap();
    		//测试能否加null
    		boolean b_null = false;
    		if(hm1.size()!=0){
    			b_null = true;
    		}
    		System.out.println("HashMap能否加null ? " + b_null);
    		
    		//往里面put值
    		Object b1 = hm1.put("水哥", "很帅");
    		Object b2 = hm1.put("水哥","13");//b2的值是很帅,所以return的是以前对应key所映射的值
    		Object b3 = hm1.put(3,4);
    		System.out.println("b1 = " + b1 + "  b2 = " + b2 + "  b3 = " + b3);
    		System.out.println("hmt.size() = " + hm1.size());//长度是2,表明key值一样的时候会覆盖掉以前的值
    		
    		//下面测试HashMap能不能添加统一对象
    		String str1 = "水哥很帅!";
    		String str2 = "水哥很帅!";
    		Map hm2 = new HashMap();
    		hm2.put(1,str1);
    		hm2.put(2,str2);
    		System.out.println("hm2.size() = " +hm2.size());//输出结果是2,说明是可以添加同一对象的
    	}
    }
    

      

  • 相关阅读:
    springboot 之JPA
    Oracle数据库安装
    Pytho之Django
    springboot之docker化
    opencv之dlib库人脸识别
    opencv之调用摄像头
    springboot之多模块化项目打包
    python学习笔记2--list
    ETL测试
    Mockserver -MOCO的使用
  • 原文地址:https://www.cnblogs.com/lcplcpjava/p/5718792.html
Copyright © 2020-2023  润新知