Java Collection框架—List\ set \map 的异同世界
Java集合是多个对象的容方法。集合(容方法)。简单点,事实上就是一个对象,能将具有同样性质的多个元素汇聚成一个总体。
Collections Framwork是用来表现和操纵集合的一个统一的体系结构。
经常使用的集合有HashMap,HashSet,ArrayList……,由于对于每个集合的内涵都非常模糊,所以才会导致自己不知道详细的使用环境。我们通过对照来区分异同:
Set(集)
Set能够说是一种最简单的集合,基本的两个实现类,HashSet。TreeSet,两者最大的差别就是TreeSet是有序的。而HashSet是无序的(具体请见后文分解)
以HashSet举例说明:
import java.util.HashSet;
import java.util.Set;
import java.util.*; public class hashset { /**
* 使用Set演示样例代码
*/
public void hashSetExample() { Set vehicles = new HashSet(); //Declare some string items
String item_1 = "apple";
String item_2 = "orange";
String item_3 = "banana"; boolean result; //把每一个文件都使用set方法增加
result = vehicles.add(item_1);
System.out.println(item_1 + ": " + result); result = vehicles.add(item_2);
System.out.println(item_2 + ": " + result); result = vehicles.add(item_3);
System.out.println(item_3 + ": " + result); //再次尝试使用item_1
result = vehicles.add(item_1);
System.out.println(item_1 + ": " + result);
} @SuppressWarnings("unchecked") public static void main(String[] args) {
new hashset().hashSetExample();
} }
最后输出的结果为:apple:true;orange:true;banana:true;apple:false,出现的原因就是由于咱们Set是不同意有反复元素出现的。
List(列表)
List相比而言,是常见的,List特征就是其元素是以线性方式存储,集合中能够存放反复的对象,当涉及到“栈”,“队列”,“链表”等时,都是使用List,事实上也就是我们数据库结构使用的那些知识。
至于详细使用什么,也得视情况而定,比方:
ArrayList():适用于能够改变长度的数组,能够对元素进行随机的訪问,仅仅只是插入,删除元素的速度较慢;
LinkedList():主要用于链表数据结构,插入和删除速度是非常快的,仅仅是訪问时的速度慢。
Vector():底层是数组数据结构 线程同步(数组长度是可变的百分之百延长)(不管查询还是增删都非常慢。所以一般不经常使用,直接用ArrayList取代来使用了。
Map(映射)
Map<key,value>是一个双列集合。是一种把键对象和值对象映射的集合,有一个Key值和一个Value值,Key值代表唯一,所以不能反复;Value值是真正能够存储的变量,所以是能够反复的。Map没有继承于Collection接口。在Map集合中检索元素时。仅仅要给出键对象。就能够返回相应的值。
对于Map而言,运行效率是一个大问题,经常使用的两个实现为:
HaspMap():Map基于散列表的实现,插入和查询“键值对”的开销是固定的。HashMap就是使用对象的HashCode来进行查询的。此方法可以显著提高性能
TreeMap():仅仅要是Tree。他就一定是经过排序的,TreeMap是唯一带有SubMap()方法的,所以它能够返回一个子树。
Map-HashCode举例:
import java.util.*;
public class hashcode {
public static void main(String[] args){
HashMap h2=new HashMap();
for(int i=0;i<10;i++)
h2.put(new Element(i), new result());
System.out.println("h2:");
System.out.println("Get the result for Element:");
Element test=new Element(5);
if(h2.containsKey(test))
System.out.println((result)h2.get(test));
else
System.out.println("Not found");
}
}
/* 这样执行结果为null,也就是得不到值 */
/* class Element{
int number;
public Element(int n){
number=n;
}
} */
/* 更改方法例如以下: */
class Element{
int number;
public Element(int n){
number=n;
}
public int hashCode(){
return number;
}
public boolean equals(Object o){
return (o instanceof Element) && (number==((Element)o).number);
}
}
class result{
Random r=new Random();
boolean possible=r.nextDouble()>0.5;
public String toString(){
if(possible)
return "OK!";
else
return "Impossible!";
}
}
对于Element而言,前后两者的对照就是一个有返回值。一个没有返回值;HashCode方法是继承于Object的。由于Element在这里覆盖了hashCode()和equals()方法,这样是前后两个Key保持了一致,所以终于有了值返回。
对于HashCode而言。事实上不必对每一个不同的对象都产生一个唯一的HashCode,仅仅要可以得到返回值就达到目的了。再者,对于HashCode,最好可以分散开,使用“分散原则”,有利于提高性能。
最后总结:
对于Collection须要了解的还有非常多非常多,这也仅仅是冰山一角,通过对照学习,可以在使用的过程中得到最优解,这样才干使我们的系统性能优化。价格合理。
Java Collection框架—List\ set \map 的异同世界的更多相关文章
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- 【转】Java集合框架List,Map,Set等全面介绍
原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含 ...
- 34、Java集合框架List,Map,Set等全面介绍(转载)
Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. Java集合框架的基本接口/类层次结构: java.util.C ...
- Java Collection框架详解
引用自:http://blog.sina.com.cn/s/blog_6d6f5d7d0100s9nu.html 经常会看到程序中使用了记录集,常用的有Collection.HashMap.HashS ...
- java 集合框架(十六)Map
一.概述 Map是一个包含键值对的集合,一个map不能有重复的键(key),而且每个键至多只能对应一个值.Map同Collection一样,它的所有通用实现都会提供一个转换器构造函数,接收一个Map类 ...
- 【集合系列】- 初探java集合框架图
一.集合类简介 Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)"丢进"该容器中.从Java 5 增加了泛型以后,Java集合可以记住容器中对象的数 ...
- 我所理解Java集合框架的部分的使用(Collection和Map)
所谓集合,就是和数组类似——一组数据.java中提供了一些处理集合数据的类和接口,以供我们使用. 由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合. 以下是java集合框架(短虚线表示接 ...
- 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射
从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...
- 初识Java集合框架(Iterator、Collection、Map)
1. Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中 注意: 既有接口也有类,图中画实线的是类,画虚线的是接口 使用之前须要到导入java.util包 List ...
随机推荐
- Django day03 orm介绍
一:orm介绍 就是对象关系映射,python当中的类能够对应到数据库当中的某一个表(一个类对应一个表),一个类的对象对应着数据库中的一条记录,类当中的某个字段对应着数据库当中表的字段,字段拥有不同的 ...
- golang——(strings包)常用字符串操作函数
(1)func HasPrefix(s, prefix string) bool 判断字符串s是否有前缀字符串prefix: (2)func HasSuffix(s, suffix string) b ...
- MyEclipse配置https
1.参照CAS配置(1)SSL证书配置文章配置证书. 2.打开myeclipse的Workspace下的.metadata/.me_tcat7/conf/server.xml 打开文件,添加如下代码 ...
- CAS配置(2)之主配置
WEB-INF目录 1.cas.properties文件(打开关闭SSL,主题,定制页面设置) #默认端口配置 #server.name=http://localhost:8080server.nam ...
- [BZOJ1601] 灌水
难点:找到正确方式建图 知识点:Kruskal 分析:这种题肯定要把点权转换到边权上,但肯定无法搞到和其他点相连的边上,怎么办呢?那就再造一个点呗,这个“超级点”和所有点相连,且边权=点权,于是就可以 ...
- BZOJ 4562 搜索...
思路: 统计入度&出度 每搜到一个点 in[v[i]]--,f[v[i]]+=f[t]; if(!in[v[i]])if(out[v[i]])q.push(v[i]);else ans+=f[ ...
- python 线程池和锁
一.死锁现象与递归锁 锁:Lock线程安全,多线程操作时,内部会让所有线程排队处理.如:list/dict/Queue 线程不安全 + 人 => 排队处理. import thre ...
- KVO的使用及底层实现
1.概念 KVO(Key-Value-Observer)也就是观察者模式,是苹果提供的一套事件通知机制.允许对象监听另一个对象特定属性的改变,并在改变时接收到事件,一般继承自NSObject的对象都默 ...
- POJ 3041 - 最大二分匹配
这道题实现起来还是比较简单的,但是理解起来可能有点困难. 我最开始想到的是贪心法,每次消灭当前小行星最多的一行或一列.然而WA了.Discuss区里已经有高人给出反例. 下面给出正确的解法 我们把行和 ...
- java中的位运算及移位运算
为了方便对二进制位进行操作,Java给我们提供了以下四个二进制位操作符: & 按位与 | 按位或 ^ 按位异或 ~ 按位取反 Java中有三个移位运算符: 左移:&l ...