摘要:本文主要向大家介绍了JAVA语言基础知识学习之集合List、Map和Set,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。
本文主要向大家介绍了JAVA语言基础知识学习之集合List、Map和Set,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。
集合介绍
我们在进行Java程序开发的时候,除了最常用的基础数据类型和String对象外,也经常会用到集合相关类。
集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用。
集合类型主要有3种:List、Set、和Map。
它们之间的关系可用下图来表示:
注:Map不是collections的子类,但是它们完全整合在集合中了!
List 接口是继承于 Collection接口并定义 一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。
一般来说,我们在单线程中主要使用的List是ArrayList和LinkedList来实现,多线程则是使用Vector或者使用Collections.sychronizedList来装饰一个集合。
这三个的解释如下:
ArrayList:内部是通过数组实现的,它允许对元素进行快随机访问。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。 LinkedList: 则是链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。 Vector: 通过数组实现的,不同的是它支持线程的同步。访问速度ArrayList慢。
它们的用法如下:
List list1 = new ArrayList();
List list2 = new LinkedList();
List list3 = new Vector();
List list4=Collections.synchronizedList(new ArrayList())
在了解了它们的用法之后,我们来看看为什么说使用ArrayList比LinkedList查询快,使用LinkedList比ArrayList新增和删除快!
这里也用以下代码来进行说明,顺便也将Vector进行比较。
代码示例:
private final static int count=50000;
private static ArrayList arrayList = new ArrayList<>();
private static LinkedList linkedList = new LinkedList<>();
private static Vector vector = new Vector<>();
public static void main(String[] args) {
insertList(arrayList);
insertList(linkedList);
insertList(vector);
System.out.println("--------------------");
readList(arrayList);
readList(linkedList);
readList(vector);
System.out.println("--------------------");
delList(arrayList);
delList(linkedList);
delList(vector);
}
private static void insertList(List list){
long start=System.currentTimeMillis();
Object o = new Object();
for(int i=0;i<count;i++){ count="" else="" i="0" instanceof="" int="" list="" long="" name="" o="new" object="" pre="" private="" return="" start="System.currentTimeMillis();" static="" string="" void=""><p>输出结果:</p><pre class="brush:java;"> ArrayList插入50000条数据,耗时:281ms
LinkedList插入50000条数据,耗时:2ms
Vector插入50000条数据,耗时:274ms
--------------------
ArrayList查询50000条数据,耗时:1ms
LinkedList查询50000条数据,耗时:1060ms
Vector查询50000条数据,耗时:2ms
--------------------
ArrayList删除50000条数据,耗时:143ms
LinkedList删除50000条数据,耗时:1ms
Vector删除50000条数据,耗时:137ms</pre>
<p>从上述结果中,可以明显看出ArrayList和LinkedList在新增、删除和查询性能上的区别。</p>
<p>在集合中,我们一般用于存储数据。不过有时在有多个集合的时候,我们想将这几个集合做合集、交集、差集和并集的操作。在List中,这些方法已经封装好了,我们无需在进行编写相应的代码,直接拿来使用就行。</p>
<p>代码示例如下:</p>
<pre class="brush:java;">/**
* 合集
* @param ls1
* @param ls2
* @return
*/
private static List<string> addAll(List<string> ls1,List<string>ls2){
ls1.addAll(ls2);
return ls1;
}
/**
* 交集 (retainAll 会删除 ls1在ls2中没有的元素)
* @param ls1
* @param ls2
* @return
*/
private static List<string> retainAll(List<string> ls1,List<string>ls2){
ls1.retainAll(ls2);
return ls1;
}
/**
* 差集 (删除ls2中没有ls1中的元素)
* @param ls1
* @param ls2
* @return
*/
private static List<string> removeAll(List<string> ls1,List<string>ls2){
ls1.removeAll(ls2);
return ls1;
}
/**
* 无重复的并集 (ls1和ls2中并集,并无重复)
* @param ls1
* @param ls2
* @return
*/
private static List<string> andAll(List<string> ls1,List<string>ls2){
//删除在ls1中出现的元素
ls2.removeAll(ls1);
//将剩余的ls2中的元素添加到ls1中
ls1.addAll(ls2);
return ls1;
}</string></string></string></string></string></string></string></string></string></string></string></string></pre>
<p>当然,经常用到的还有对List进行遍历。</p>
<p>List数组遍历主要有这三种方法,普通的for循环,增强for循环(jdk1.5之后出现),和Iterator(迭代器)。</p>
<p>代码示例:</p>
<pre class="brush:java;"> List<string>
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号