2、JAVA集合可以存储和操作数目不固定的一组数据。

3、若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。

注:使用相应的toArray()和Arrays.asList()方法可以相互转换。

二、Java集合


集合类存放于Java.util包中。

集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用。

集合类型主要有三种:set(集)、list(列表)、map(映射)。

三、Collection接口


Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。Java SDK提供的类都是继承自Collection的“子接口”如List和Set。

如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:


Iterator it = collection.iterator(); // 获得一个迭代子while(it.hasNext()) {Object obj = it.next(); // 得到下一个元素}

由Collection接口派生的两个接口是List和Set。

四、Set


Set接口同样是Collection接口的一个子接口,Set不包含重复的元素。

HashSet:使用hashmap的一个集的实现。虽然集定义成无序,但必须存在某种方法能高效地找到一个对象。使用一个hashmap对象实现集的存储和检索操作时在固定时间内实现的。

TreeSet:在集中以升序对对象排序的集的实现。这意味着从一个TreeSet对象获得第一个迭代器将按升序提供对象。TreeSet类使用了一个TreeMap。

为优化hashset空间的使用,可以调优初始容量和负载因子。TreeSet 不包含调优选项,因为树总是平衡的,保证了插入、删除、查询的性能的高效。

当您要从集合中以有序的方式抽取元素时,TreeSet实现会有用处。为了能顺利进行,添加到TreeSet的元素必须是可排序的。


import java.util.*;public class SetExample {public static void main(String args[]) {Set set = new HashSet();set.add("Bernadine");set.add("Elizabeth");set.add("Gene");set.add("Elizabeth");set.add("Clara");System.out.println(set);Set sortedSet = new TreeSet(set);System.out.println(sortedSet);}}

五、List


List接口继承了Collection接口,定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。

实际上有两种list:一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是快速随机访问设计的,而是具有更通用的方法。

  • List : 次序是List最重要的特点:它保证维护元素特定的顺序。

  • ArrayList : 由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。

  • LinkedList : 对顺序访问进行了优化,向List中间插入与删除的开销并不大,随机访问则相对较慢。还具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

  • Vector:实现一个类似数组一样的表,自动增加容量来容纳你所需的元素。使用下标存储和检索对象就象在一个标准的数组中一样。你也可以用一个迭代器从一个Vector中检索对象Vector是唯一的同步容器类!!

  • stack:这个类从vector派生而来,并增加了方法实现栈,一种后进先出的存储结构。

List的用法示例:


package collection;import java.util.*;public class SetExample {public static void main(String[] args) {List linkedList = new LinkedList();for (int i = 0; i <= 5; i++) {linkedList.add("a"+i);}System.out.println(linkedList);linkedList.add(3,"a100");System.out.println(linkedList);linkedList.set(6,"a200");System.out.println(linkedList);System.out.println(linkedList.get(2));System.out.println(linkedList.indexOf("a3"));linkedList.remove(1);System.out.println(linkedList);}}

六、list和set对比


Set子接口:无序,不允许重复,检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

List子接口:有序,可以有重复元素,和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

Set和List具体子类:

Set

|————HashSet:以哈希表的形式存放元素,插入删除速度很快。

List

|————ArrayList:动态数组

|————LinkedList:链表、队列、堆栈。

七、map


1、map接口不是Collection接口的继承。

不重复的键到值的映射。

2、Map.Entry 接口

map的entrySet()方法返回一个实现map.entry接口的对象集合。集合中每个对象都是底层map中一个特定的键值对。

3、HashMap 类和 TreeMap 类

在map中插入、删除和定位元素,HashMap是最好的选择。但如果您要按顺序遍历键,那么TreeMap 会更好。根据集合大小,先把元素添加HashMap,再把这种映射转换成一个用于有序键遍历的TreeMap 可能更快。

为了优化hashmap空间的使用,您可以调优初始容量和负载因子。这个treeMap没有调优选项,因为该树总处于平衡状态。

  • hashtable:实现一个映象,所有的键必须非空。为了能高效的工作,定义键的类必须实现hashcode()方法和equal()方法。这个类时前面Java实现的一个继承,并且通常能在实现映象的其它类中更好地使用。

  • hashmap:实现一个映象,运行存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个空)。

  • WeakHashMap:如果有一个键对于一个对象而言不再被引用,键将被舍弃,WeakHashMap在具有大量数据时使用。

  • TreeMap: 实现这样一个映象,对象是按键升序排列的。

4、map的使用示例

以下程序演示了具体map类的使用。该程序对自命令行传递的词进行频率计数。hashmap起初用于数据存储。后来,映射被转换为TreeMap以显示有序的键列列表。


package collection;import java.util.Collections;import java.util.HashMap;import java.util.Map;import java.util.TreeMap;public class MapExample {public static void main(String[] args) {String[] array = {"a","b","c","d","e"};Map map = new HashMap();Integer ONE = new Integer(1);for (int i=0, n=array.length; i<n; i++) {String key = array[i];int frequency = i+1;map.put(key, frequency);}System.out.println(map);Map sortedMap = new TreeMap(map);System.out.println(sortedMap);//hashmap的同步Map map1 = Collections.synchronizedMap(map);System.out.println(map1);}}

5、控制台输出

最后

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?

既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?

架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

如果你也想成为一名好的架构师,那或许这份**Java核心架构笔记**你需要阅读阅读,希望能够对你的职业发展有所帮助。

中高级开发必知必会:

下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?

既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?

架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

如果你也想成为一名好的架构师,那或许这份**Java核心架构笔记**你需要阅读阅读,希望能够对你的职业发展有所帮助。

中高级开发必知必会:

linux视频教程百度网盘分享,Java集合基础知识总结(绝对经典相关推荐

  1. Java视频教程百度网盘,Java精选面试Spring全家桶

    Spring 10C原理 Spring APO原理 Spring MVC原理 Spring Boot原理 JPA原理 Mybatis缓存 Tomcat架构 Spring面试题 一**.基本概念面试题集 ...

  2. 工作流 activity 视频教程 + redis 视频教程 百度网盘分享地址

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 云盘下载都没有密码,直接下载,解压有密码:chongxiangmengxiangjiaoyu, 解压 ...

  3. 国内计算机博士去百度云,于博士Cadence视频教程60集全套百度网盘分享

    于博士Cadence视频教程60集全套百度网盘分享 于博士Cadence视频教程60集全套百度网盘分享,拿来主义,拿去主义,不谢~~~老吴就是看于博士Cadence视频教程入的门,虽然于博士录这些视频 ...

  4. 于博士Cadence视频教程60集全套百度网盘分享

    原文地址::http://www.mr-wu.cn/dr-yu-cadence-tutorial-videos-baidu-share/ 相关文章 1.于争博士cadence视频教程的工程文件,原理图 ...

  5. 实现百度网盘分享保存到自己的网盘

    目录 前言 简介 地址链接 功能 实现百度网盘分享保存到自己的网盘 查看源码的方式出现http地址 java实现解析地址保存到数据库 Python webdriver.Chrome()的使用 Pyth ...

  6. 我的百度网盘分享链接

    我的百度网盘分享链接 是大概几年前,我在淘宝上看到有人卖中科院的视频,我就买了一些,发到verycd上,然后陆续有网友也买了一些,请我代发到verycd上,于是形成了最早的中科院系列视频.2014年, ...

  7. 软件测试“因子表”使用测试工具PICT下载安装,PICT中文乱码问题,pict下载百度网盘分享

    有没有思考过"如何让有限的测试具有代表整体的测试覆盖率"? 在测试工作中,经常会遇到这样的场景:一个软件功能有多个输入项,每个输入项有多个可选项:一个接口有多个参数,每个参数有多个 ...

  8. python进阶训练营百度网盘_(在线观看)【完结】私域流量实战训练营(百度网盘分享下载)...

    今日推荐(在线观看)[完结]私域流量实战训练营(百度网盘分享下载)对  (在线观看)[完结]私域流量实战训练营(百度网盘分享下载)感兴趣的朋友可以学习参考 (有需要的找我,你就可以拥有这个课程)需要此 ...

  9. 优麒麟这样的linux版本,百度网盘 Linux 版发布,搭配优麒麟运行更完美!

    近日,百度官宣推出了百度网盘 Linux 版(在此之前已发布 Windows.Android.iPhone.iPad.Windows Phone.Mac 等多个平台的版本),版本号为 Linux V2 ...

最新文章

  1. Java:何时使用静态方法
  2. WP7进阶】——XNA游戏平面矩形碰撞检测
  3. 都2021年了,不会还有人连深度学习都不了解吧(三)- 损失函数篇
  4. PHP Curl transfer closed with outstanding read data remaining
  5. [Baltic2009]Radio Transmission
  6. mysql 1.42_MySQL索引(一)
  7. Java基础学习总结(95)——Java反射主要用来干什么?
  8. Speaking of the impact of the epidemic
  9. 配置 MAC地址表实现绑定和过滤
  10. 基于SSM的高校后勤管理系统Java项目
  11. 关于批判性思维(Critical Thinking)
  12. Solved: RDP Disconnected – Error Code 2825 mremote
  13. 亚马逊卖家运营必备八大工具
  14. golden ticket和sliver ticket的区别是什么?
  15. 怎么抓取计算机窗口,又学会了一种黑别人电脑的方法——如何在登录界面获取shell...
  16. 人工智能:风口之上泡沫之中谨慎入坑
  17. mt4支持python么_py-mt4
  18. EFCore——Entry和Attach
  19. MATLAB读RGB888数据显示图片
  20. USART_ClearITPendingBith和 USART_ClearFlag的区别

热门文章

  1. tensorrt动态输入分辨率尺寸
  2. library “libopencv_java4.so“ not found“
  3. python 调用C++,传递int,char,char*,数组和多维数组
  4. boost之ThreadPool
  5. 对于随机森林的通俗理解
  6. dsst依赖opencv
  7. 通俗介绍拉普拉斯变换,傅里叶变换和z变换
  8. 三.Linux平台安装MongoDB
  9. php函数find的用法,c语言find函数的用法详解
  10. win7系统连接2003服务器时快时慢,win7/win8/win10访问Windows2003和XP共享慢的解决方法【图文教程】...