概况总结

首先,区分最顶层接口的区别: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,说明是可以添加同一对象的
}
}

  

java集合类的学习总结一的更多相关文章

  1. java集合类的学习(一)

    为何要用集合类:可以储存不同类型的数据,可以进行动态的删除和修改,不用考虑数组越界的问题. 软件开发常用的集合类:Vector,ArrayList,Stack,HashMap,Hashtable. 3 ...

  2. java集合类的学习(二)

    ArrayList,LinkedList,Vector都是List的实现类,前两都没有实现同步机制,Vector实现了同步机制.他们代码类似. ArrayList代表大小可变的数组,允许对元素进行快速 ...

  3. java集合类(五)About Map

    接上篇“java集合类(四)About Set” 这次学完Map之后,就剩队列的知识,之后有关java集合类的学习就将告一段落,之后可能会有java连接数据库,I/O,多线程,网络编程或Android ...

  4. java集合类(二)List学习

    接上篇  java集合类(一) List接口继承了Collection接口和Iterable接口,即同样含有Collection和 Iterable的特性,还有方法,其基本方法有: 1)有关添加: b ...

  5. java集合类学习心得

    java集合类学习心得 看了java从入门到精通的第十章,做个总结,图片均取自网络. 常用集合的继承关系 Linked 改快读慢 Array 读快改慢 Hash 两都之间 Collection是集合接 ...

  6. java集合类源码学习一

    对于java的集合类,首先看张图 这张图大致描绘出了java集合类的总览,两个体系,一个Collection集合体系一个Map集合体系.在说集合类之前,先说说Iterable这个接口,这个接口在jdk ...

  7. java集合类源码学习三——ArrayList

    ArrayList无疑是java集合类中的一个巨头,而且或许是使用最多的集合类.ArrayList继承自AbstractList抽象类,实现了List<E>, RandomAccess, ...

  8. Java集合类: Set、List、Map、Queue使用场景梳理

    本文主要关注Java编程中涉及到的各种集合类,以及它们的使用场景 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E ...

  9. Java集合类: Set、List、Map、Queue使用

    目录 1. Java集合类基本概念 2. Java集合类架构层次关系 3. Java集合类的应用场景代码 1. Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的 ...

随机推荐

  1. 第二次作业#include <stdio.h> int main() { int a,b,c,d,e; printf("请输入一个不多于五位的整数:\n"); scanf("%d",&a); if(a>=100000||a<=0) { printf("输入格式错误! \n"); } else { if(

    1 判断成绩等级 给定一百分制成绩,要求输出成绩的等级.90以上为A,80-89为B,70-79为C,60-69为D,60分以下为E,输入大于100或小于0时输出"输入数据错误". ...

  2. 【随笔】ssh登录时如何直接在参数中加入登录密码

    如同apt-get安装程序时会有-y参数来避免交互输入一样,我也希望在ssh登录时能够直接附加登录密码以避免交互式输入密码这一步,网上找了找,方法很多. 比如直接通过密钥免密码登录,不过需要改动很多, ...

  3. Java集合之TreeMap

    Map的单元是对键值对的处理,之前分析过的两种Map,HashMap和LinkedHashMap都是用哈希值去寻找我们想要的键值对,优点是由O(1)的查找速度. 那如果我们在一个对查找性能要求不那么高 ...

  4. SAS文档:简单的随机点名器

    本次实验,我们设计了一个简单的随机点名系统,下面我来介绍一下它的SRS文档. 1.功能需求: 1.1 模块1 在此模块中,我们设置了RandomName类,创建一个随机点名器,里面加入了所在课程的名单 ...

  5. select 练习2

    group by :select 分组字段,聚合函数 from 表名 where  条件 group by 分组字段 having 过滤条件 select cno,avg(degree) from s ...

  6. PHP裁剪图片并上传完整demo

    日前根据功能需求,要做一个图片裁剪上传的功能,在网上找了好久,找到了这位仁兄写的demo! 下载压缩包

  7. Linux上设置nginx支持https

    1.前提条件 如果系统没有自带openssl,则需要安装. 2.生成证书 # .首先,进入你想创建证书和私钥的目录,例如: cd /etc/nginx/ # .创建服务器私钥,命令会让你输入一个口令: ...

  8. 20151009 C# 第一篇 程序编写规范

    20151009 程序编写规范 1. 代码书写规则: 1).尽量使用接口,然后使用类实现接口. 2).关键语句写注释 3).避免写超过5个参数的方法,如果要传递多个参数,则使用结构 4).避免代码量过 ...

  9. PYTHON第三天

    PYTHON之路 七.基本的if判断 最简单的流程处理: if ...else If简单练习: #!/usr/bin/env  python # -*-coding:utf-8 -*- #if 基本表 ...

  10. #笔记#JavaScript进阶篇二

    #常用函数对象属性介绍2 getAttribute()方法—— 通过元素节点的属性名称获取属性的值. 语法: elementNode.getAttribute(name) 说明: 1. name:要想 ...