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,说明是可以添加同一对象的
}
}
java集合类的学习总结一的更多相关文章
- java集合类的学习(一)
为何要用集合类:可以储存不同类型的数据,可以进行动态的删除和修改,不用考虑数组越界的问题. 软件开发常用的集合类:Vector,ArrayList,Stack,HashMap,Hashtable. 3 ...
- java集合类的学习(二)
ArrayList,LinkedList,Vector都是List的实现类,前两都没有实现同步机制,Vector实现了同步机制.他们代码类似. ArrayList代表大小可变的数组,允许对元素进行快速 ...
- java集合类(五)About Map
接上篇“java集合类(四)About Set” 这次学完Map之后,就剩队列的知识,之后有关java集合类的学习就将告一段落,之后可能会有java连接数据库,I/O,多线程,网络编程或Android ...
- java集合类(二)List学习
接上篇 java集合类(一) List接口继承了Collection接口和Iterable接口,即同样含有Collection和 Iterable的特性,还有方法,其基本方法有: 1)有关添加: b ...
- java集合类学习心得
java集合类学习心得 看了java从入门到精通的第十章,做个总结,图片均取自网络. 常用集合的继承关系 Linked 改快读慢 Array 读快改慢 Hash 两都之间 Collection是集合接 ...
- java集合类源码学习一
对于java的集合类,首先看张图 这张图大致描绘出了java集合类的总览,两个体系,一个Collection集合体系一个Map集合体系.在说集合类之前,先说说Iterable这个接口,这个接口在jdk ...
- java集合类源码学习三——ArrayList
ArrayList无疑是java集合类中的一个巨头,而且或许是使用最多的集合类.ArrayList继承自AbstractList抽象类,实现了List<E>, RandomAccess, ...
- Java集合类: Set、List、Map、Queue使用场景梳理
本文主要关注Java编程中涉及到的各种集合类,以及它们的使用场景 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E ...
- Java集合类: Set、List、Map、Queue使用
目录 1. Java集合类基本概念 2. Java集合类架构层次关系 3. Java集合类的应用场景代码 1. Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的 ...
随机推荐
- css基本知识框架(转)
css基本知识框架: 1.css样式表的基本概念 2.样式表基本类型-----1.内嵌样式 2.内联样式3.链入外部样式表4.导入外部?式 3.样式表配置方法 4.字体属性----1.font-fam ...
- flash builder关掉自动编译功能
菜单栏 项目,里面有个自动构建,把√去掉就ok了
- Angular.js参考
http://www.cnblogs.com/popo123/p/5673955.html
- Tomcat Xms Xmx PermSize MaxPermSize 区别 及 java.lang.OutOfMemoryError: PermGen space 解决
解决方案 在 catalina.bat 里的 蓝色代码前加入: 红色代码 rem ----- Execute The Requested Command ----------------------- ...
- Apache配置默认首页面
conf -> httpd.conf下设置成 <IfModule dir_module> DirectoryIndex index.php index.html index.htm ...
- radio button(单选按钮)
单选按钮只是input输入框的一种类型. 每一个单选按钮都应该嵌套在它自己的label(标签)元素中. 注意:所有关联的单选按钮应该使用相同的name属性. 下面是一个单选按钮的例子: <lab ...
- [Leetcode][JAVA] Best Time to Buy and Sell Stock I, II, III
Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of a gi ...
- ubuntu下配置安装PYQT4
apt-get安装(快) sudo apt-get install libxext6 libxext-dev libqt4-dev libqt4-gui libqt4-sql qt4-dev-tool ...
- qooxdoo 3.0 发布,JavaScript 的 GUI 框架
qooxdoo 3.0 是一个主要的版本,包含很多新特性和内部的改动,qooxdoo 3.0 是一个通用的 JS 框架,主要改进体现在 qx.Desktop, qx.Mobile, 和 qx.Webs ...
- MVC中使用RazorPDF创建PDF
这篇文章主要介绍使用Nuget package中的RazorPDF简单的创建PDF的方法. 关于RazorPDF 这个Nuget Package由Al Nyveldt创建.它内部使用ITextShar ...