集合又称之为容器存储对象的一种方式
•数组虽然也可以存储对象,但长度是固定的;显然需要可变长度的容器
集合和数组的区别?
                A:长度区别
                        数组固定
                        集合可变
                B:内容区别
                        数组可以是基本类型,也可以是引用类型
                        集合只能是引用类型
                C:元素内容
                        数组只能存储同一种类型
                        集合可以存储不同类型(其实集合一般存储的也是同一种类型)

 

基本框架
Collection
        |--List
                |--ArrayList
                |--Vector
                |--LinkedList
        |--Set
                |--HashSet
                |--TreeSet

集合框架中常用关系图

Collection接口有两个子接口:

List(列表) ,Set(集)

List:可存放重复元素,元素存取是有序的。

Set:不可以存放重复元素,元素存取是无序的。

List常用方法
Vector:底层数据结构是数组,线程安全,但速度慢,已被  ArrayList替代。
•public void addElement(E obj)
•public E elementAt(intindex)
•publicEnumerationelements()

ArrayList:底层数据结构是数组 ,线程不安全,查询速度快。
LinkedList:底层数据结构是链表,链表结构,增删速度快。
•public void addFirst(E e)及addLast(E e)
•public E getFirst()及getLast()
•public E removeFirst()及public E removeLast()

取出LIst集合中元素的方式:

•get(int  index):通过脚标获取元素。
•iterator():通过迭代方法获取迭代器对象。
 

   public static <T> void sort(List<T> list)
                public static <T> int binarySearch(List<?> list,T key)
                public static <T> T max(Collection<?> coll)
                public static void reverse(List<?> list)
                public static void shuffle(List<?> list)

迭代
迭代是取出集合中元素的一种方式。
因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。
用法:
for(Iterator iter = iterator();iter.hasNext();  )
{   System.out.println(iter.next());
} 
  Iterator iter = list.iterator();
while(iter.hasNext())
{   System.out.println(iter.next());
}

迭代器在Collcection接口中是通用的,它替代了Vector类中的Enumeration(枚举)。
迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。
迭代器的next方法返回值类型是Object,所以要记得类型转换。

Set
HashSet:线程不安全,存取速度快。
通过equals方法和hashCode方法来保证元素的唯一性。
不保证set的迭代顺序,也不保证顺序是恒久不变的
1:底层数据结构是哈希表(是一个元素为链表的数组)
               2:哈希表底层依赖两个方法:hashCode()和equals()
                  执行顺序:
                        首先比较哈希值是否相同
                                相同:继续执行equals()方法
                                        返回true:元素重复了,不添加
                                        返回false:直接把元素添加到集合
                                不同:就直接把元素添加到集合

TreeSet: 线程不安全,可以对Set集合中的   元素进行排序。
通过compareTo或者compare方法中的来保证元素的唯一性。元素是以二叉树的形式存放的。
1:底层数据结构是红黑树(是一个自平衡的二叉树)
2:保证元素的排序方式
        a:自然排序(元素具备比较性)
                让元素所属的类实现Comparable接口
        b:比较器排序(集合具备比较性)
                让集合构造方法接收Comparator的实现类对象

LinkedHashSet:
元素有序唯一
由链表保证元素有序
由哈希表保证元素唯一

泛型

早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。
也就存在这隐患,所以Java提供了泛型来解决这个安全问题。

JDK1.5以后出现的机制

提高了程序的安全性
将运行期遇到的问题转移到了编译期
省去了类型强转的麻烦
泛型类的出现优化了程序设计
泛型类
•把泛型定义在类上
•格式:public class 类名<泛型类型1,…>
•注意:泛型类型必须是引用类型
泛型方法
•把泛型定义在方法上
•格式:public <泛型类型> 返回类型 方法名(泛型类型 .)
泛型接口
•把泛型定义在接口上
•格式:public  interface 接口名<泛型类型1…>
泛型通配符<?>
任意类型,如果没有明确,那么就是Object以及任意的Java类了
? extends E
向下限定,E及其子类
? super E
向上限定,E及其父类

Map
Map与Collection在集合框架中属并列存在
Map存储的是键值对
Map存储元素使用put方法,Collection使用add方法
Map集合没有直接取出所有元素的方法(可以get获取指定的),而是先转成Set集合,在通过迭代获取元素
Map集合中键要保证唯一性
Hashtable:线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
HashMap:线程不安全,速度快,允许存放null键,null值。 键是哈希表结构,可以保证键的唯一性
TreeMap:对键进行排序,排序原理与TreeSet相同。键是红黑树结构,可以保证键的排序和唯一性
LinkedHashMap: Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。

集合框架工具类  Collections
对集合进行查找
取出集合中的最大值,最小值
对List集合进行排序

foreach
for(数据类型 变量名 : 数组或Collection集合)
{
执行语句;
}      

常见数据结构
队列
数组
链表
哈希表

 
静态导入
•格式:import static 包名….类名.方法名;
•可以直接导入到方法的级别
注意事项
•方法必须是静态的

如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用

可变参数
•定义方法的时候不知道该定义多少个参数
格式
•修饰符 返回值类型 方法名(数据类型…  变量名){}
•注意:
•这里的变量其实是一个数组
•如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个

Arrays工具类中的一个方法
•public static <T> List<T> asList(T... a)

集合选择
Collection
        |--List        有序,可重复
                |--ArrayList
                        底层数据结构是数组,查询快,增删慢。
                        线程不安全,效率高
                |--Vector
                        底层数据结构是数组,查询快,增删慢。
                        线程安全,效率低
                |--LinkedList
                        底层数据结构是链表,查询慢,增删快。
                        线程不安全,效率高
        |--Set        无序,唯一
                |--HashSet
                        底层数据结构是哈希表。
                        如何保证元素唯一性的呢?
                                依赖两个方法:hashCode()和equals()
                                开发中自动生成这两个方法即可
                        |--LinkedHashSet
                                底层数据结构是链表和哈希表
                                由链表保证元素有序
                                由哈希表保证元素唯一
                |--TreeSet
                        底层数据结构是红黑树。
                        如何保证元素排序的呢?
                                自然排序
                                比较器排序
                        如何保证元素唯一性的呢?
                                根据比较的返回值是否是0来决定

    
        ArrayXxx:底层数据结构是数组,查询快,增删慢
        LinkedXxx:底层数据结构是链表,查询慢,增删快
        HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
        TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

Properties集合
Properties作为Map集合的使用
Properties的特殊功能
•public Object setProperty(String key,String value)
•public String getProperty(String key)
•public Set<String> stringPropertyNames()
Properties和IO流的结合使用
•public void load(Reader reader)
•public void store(Writer writer,String comments)

转载于:https://www.cnblogs.com/noteless/p/9260358.html

-1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器...相关推荐

  1. java学习--基础知识进阶第十天--标准输入流 转换流 打印流、对象操作流 、Properties集合...

    今日内容介绍 u  标准输入流 & 转换流 & 打印流 u  对象操作流 u  Properties集合 第1章 标准输入流 & 转换流 & 打印流 1.1 标准输入输 ...

  2. java面向对象程序基础实验_20165115 实验二《Java面向对象程序设计》实验报告

    20165115 实验二 面向对象程序设计 这一次的实验,老师按照实验内容的不同将实验分成了五个部分进行.五个部分的侧重难易都有区别,实验报告中的叙述也会有所区别. 第一部分 先上实验结果截图: 这一 ...

  3. java代码写jsp读取,Java IO学习基础之读写文本文件-JSP教程,Java技巧及代码

    java的io操作都是基于流进行操作的,为了提高读写效率一般需要进行缓冲. 简单的示例程序如下: /** * 读出1.txt中的内容,写入2.txt中 * */ import java.io.*; p ...

  4. java 累加器_Spark基础教程——累加器的使用(JAVA)

    通常在向Spark传递函数时,比如使用map()函数或者用filter()传条件时,可以使用驱动器程序中定义的变量,但是集群中运行的每个任务都会得到这些变量的一份新的副本,更新这些副本的值也不会影响驱 ...

  5. eclipse用Java输入_Java基础教程——使用Eclipse快速编写Java输入输出代码

    Eclipse安装 IDE:Integrated Development Environment,集成开发环境.好比是全自动洗衣机. 此处使用[eclipse-jee-4.6-neon-3-win32 ...

  6. java web tcp长连接超时时间_常用java web容器http长连接超时设置

    1.http长连接相关知识 http长连接对我们来说并不陌生,但长连接并不是永远不会关闭.对于HTTP长连接需要注意下面几点:keepalive_timeout指的是web服务器发送完最后一个响应报文 ...

  7. Java中集合相关案例(泛型通配符、Collections工具类、TreeSet、TreeMap、HashMap、HashSet和集合嵌套案例)

    集合 一.集合相关案例 1.泛型通配符案例 2.集合工具类(Collections工具类) 3.TreeSet和TreeMap案例 4.HashMap案例 5.HashSet案例 6.TreeSet案 ...

  8. java自动化测试框架基础eclipse+maven配置

    java自动化测试框架基础eclipse+maven配置 文章目录 java自动化测试框架基础eclipse+maven配置 一.maven安装配置 二.eclipse中使用maven 一.maven ...

  9. java integer最大值_五分钟学会java中的基础类型封装类

    在刚刚学习java的时候,老师不止一次的说过java是一种面向对象的语言,万物皆对象.对于java中的基础数据类型,由于为了符合java中面向对象的特点,同样也有其封装类.这篇文章对其有一个认识. 一 ...

最新文章

  1. Servlet Cookie处理
  2. Hadoop基础-HDFS集群中大数据开发常用的命令总结
  3. 终端通过两台路由器相互通信(静态路由设置)
  4. ACM ICPC 2017 Warmup Contest 2[菜鸡选手的成长]
  5. 【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)(四)
  6. 砝码称重 洛谷 1441
  7. 这部日本「神作」彻底拉低了我入门AI的门槛
  8. linux socket关闭并释放资源,【linux】centos 上 php-fpm 占用太多状态为 CLOSED 的 socket 且不释放, 如何解决?...
  9. 利用CloudIDE当做简单linux环境,执行简单python工程任务
  10. linux下VScode开发ESP32,VsCode设置ESP32工具链+刨根问底点灯
  11. antd form rules字数限制_Package - antd-form-rules
  12. python函数的特性_Python学习(007)-函数的特性
  13. Maven搭建SpringMVC+Mybatis项目详解
  14. Java项目的命名规范
  15. 系统集成项目管理工程师(软考中级)知识点总结【挣值分析】【关键路径】
  16. 教孩子学编程python语言pdf_教孩子学编程 PYTHON语言版 PDF 下载
  17. 《东周列国志》第九十回 苏秦合纵相六国 张仪被激往秦邦
  18. shopNC开发手册
  19. PHP实现jsapi微信支付
  20. C语言 键盘编码 及 用法

热门文章

  1. Idea Intellij 常用快捷键
  2. minifilter 与用户态的通信
  3. 做Web应用程序时应该如何面向对象杂谈
  4. 超越村后端开发(7:修改完善代码(持续更新))
  5. seleniuim面试题1
  6. 小数(decimal,double) 截取两位或多位,不四舍五入
  7. ST算法 Sliding Window algorithm template
  8. PHP计划任务:如何使用Linux的Crontab执行PHP脚本(转载)
  9. SQLSERVER聚集索引的整理(重建)的必要性测试
  10. Centos 6.5-yum安装出现错误解决方案