1、定义:Java集合类存放于java.util包,是存放对象的容器,长度可变,只能存放对象,可以存放不同的数据类型;

2、常用集合接口:

  a、Collection接口:最基本的集合接口,存储不唯一,无序的对象,List接口和Set接口的父接口;

  b、List接口:一个有序、可以重复的集合,常用实现类ArrayList和LinkedList;

// 底层数据结构是数组,查询快,增删慢,线程不安全,效率高
List arrayList = new ArrayList();
// 底层数据结构是数组,查询快,增删慢,线程安全,效率低,耗性能
List vector = new Vector();
// 底层数据结构是链表,查询慢,增删快,线程不安全,效率高
List linkedList = new LinkedList();

c、Set接口:一个无序、不可重复的集合,常用实现类HashSet、LinkedHashSet、TreeSet;

// 元素无序,不可重复,线程不安全,集合元素可以为 NULL
Set hashSet = new HashSet();
// 底层采用链表和哈希表的算法,保证元素有序,唯一性(即不可以重复,有序),线程不安全
Set linkedHashSet = new LinkedHashSet();
// 底层使用红黑树算法,擅长于范围查询,元素有序,不可重复,线程不安全
Set treeSet = new TreeSet();

d、Map接口:key-value的键值对,key不允许重复,value可以,key-value通过映射关系关联,常用实现类HashMap和TreeMap;

// 采用哈希表算法,key无序且不允许重复,key判断重复的标准是:key1和key2是否equals为true,并且hashCode相等
Map<String, String> hashMap = new HashMap<String, String>();
// 采用红黑树算法,key有序且不允许重复,key判断重复的标准是:compareTo或compare返回值是否为0
Map<String, String> treeMap = new TreeMap<String, String>();

3、Set和List的区别:

  a、Set实例存储是无序的,不重复的数据;List实例存储的是有序的,可以重复的元素;

  b、Set检索效率低下,删除和插入效率高,删除和插入不会引起元素位置改变;

  c、List可以根据存储的数据长度自动增长List长度,查找元素效率高,插入删除效率低,插入和删除时会引起其他元素位置改变;

4、Map和Set的关系:

  a、HashMap、HashSet 都采哈希表算法,TreeMap、TreeSet 都采用红黑树算法、LinkedHashMap、LinkedHashSet 都采用哈希表算法和红黑树算法;

  b、分析Set的底层源码,Set 集合就是由Map集合的Key组成;

5、集合遍历:

// 遍历List
List<String> lst = new ArrayList<String>();
lst.add("apple");
lst.add("banana");
// 第一种
for(int i = ; i < lst.size(); i++){
System.out.println(lst.get(i));
}
// 第二种
for(String str : lst){
System.out.println(str);
}
// 第三种 迭代器
Iterator it = lst.iterator();
while(it.hasNext()){
System.out.println(it.next());
} // 遍历Map
Map<String, String> map = new HashMap<String, String>();
map.put("apple", "苹果");
map.put("banana", "香蕉");
// 第一种
for(String key : map.keySet()){
System.out.println(key + "——" + map.get(key));
}
// 第二种 推荐使用尤其是数据量大时
for(Entry<String, String> entry : map.entrySet()){
System.out.println(entry.getKey() + "——" + entry.getValue());
}
// 第三种 迭代器
Iterator<Entry<String, String>> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
Entry<String, String> entry = iterator.next();
System.out.println(entry.getKey() + "——" + entry.getValue());
}
// 第四种 无法取到key值
for(String val : map.values()){
System.out.println(val);
}

Java知识点梳理——集合的更多相关文章

  1. java知识点梳理

    网络搜索结果,出处不详,仅供参考 对于刚刚接触Java的人,java基础知识技术点繁多,那么gkstk小编为大家汇总最全java知识点如下,仅供大家参考学习! 1. JVM相关(包括了各个版本的特性) ...

  2. Java核心技术梳理-集合

    一.前言 在日常开发中,我们经常会碰到需要在运行时才知道对象个数的情况,这种情况不能使用数组,因为数组是固定数量的,这个时候我们就会使用集合,因为集合可以存储数量不确定的对象. 集合类是特别有用的工具 ...

  3. Java知识点梳理——装箱和拆箱

    1.前言:Java是典型的面向对象编程语言,但其中有8种基本数据类型不支持面向对象编程,基本数据类型不具备对象的特性,没有属性和方法:Java为此8种基本数据类型设计了对应的类(包装类),使之相互转换 ...

  4. Java知识点梳理——继承

    1.定义:继承允许创建分等级层次的类,就是子类继承父类的特征行为,使得子类对象具有父类实例的方法,   使得子类具有父类相同的行为. 2.继承的特性: a.子类拥有父类非priavte的属性.方法: ...

  5. Java知识点梳理——抽象类和接口

    抽象类 1.定义:没有包含足够的信息来描绘一个具体对象的类,不能被实例化,必须被继承: 2.abstract关键字:abstract class定义抽象类,普通类的其它功能依然存在,如变量.方法等: ...

  6. Java知识点梳理——多态

    1.定义:多态是同一个行为具有多个不同表现形式或形态的能力,即一个接口不同的实例执行不同的操作: 2.优点:消除类型之间的耦合关系.可替换性.可扩展性.接口性.灵活性.简化性: 3.多态存在的3个必要 ...

  7. Java知识点梳理——常用方法总结

    1.查找字符串最后一次出现的位置 String str = "my name is zzw"; int lastIndex = str.lastIndexOf("zzw& ...

  8. AJPFX关于java 知识点的集合

    1 .对象的初始化 (1 )非静态对象的初始化 在创建对象时,对象所在类的所有数据成员会首先进行初始化. 基本类型:int 型,初始化为0. 如果为对象:这些对象会按顺序初始化. ※在所有类成员初始化 ...

  9. java 知识点梳理

    1.ArrayList与linkedList 区别 ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦; 优点是查找比较快. Lin ...

随机推荐

  1. Mycat和MySQL的差别——Mycat的核心作用

    有个朋友面试的时候被问到:Mycat和MySQL的差别.我们能够把上层看作是对下层的抽象,比如操作系统是对各类计算机硬件的抽象.那么我们什么时候须要抽象?假如仅仅有一种硬件的时候,我们须要开发一个操作 ...

  2. PostgreSQL在线安装

    背景:CentOS 7 一.在线yum安装 yum -y install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7 ...

  3. python 中写hive 脚本

    1.直接执行.sql脚本 import numpy as np import pandas as pd import lightgbm as lgb from pandas import DataFr ...

  4. asp.net mvc部署iis常见问题

    1.Q:iis比网上的少很多选项 A:iis没装全,去控制面板里把没勾选的选项勾选 2.Q:发布mvc遇到的HTTP错误 403.14-Forbidden解决办法 A:需要在web.config里添加 ...

  5. python pip的安装流程,以及使用pip更新,卸载第三方模块

    在Python的学习过程中,肯定会遇到很多安装模块的地方,可以使用easy_install安装,但是easy_install相对于pip而言,最大的缺陷就是它所安装的模块是不能够卸载的,其他功能是和p ...

  6. makefile之override

    override指示符 通常在执行 make 时,如果通过命令行定义了一个变量,那么它将替代在 Makefile中出现的同名变量的定义. 就是说,对于一个在 Makefile 中使用常规方式(使用&q ...

  7. C++ 简单的日志类

    用法如下: #include "EasyLog.h" int main(){ EasyLog::Inst()->Log("Run..."); } 不只是m ...

  8. zend server mac 下配置

    Post Installation on Mac OS X If you intend to use PHP and other tools provided by Zend Server (pear ...

  9. python模块之XlsxWriter 详解

    Xlsx是python用来构造xlsx文件的模块,可以向excel2007+中写text,numbers,formulas 公式以及hyperlinks超链接. 可以完成xlsx文件的自动化构造,包括 ...

  10. python学习笔记(5)--泡菜:永久存储

    说明: 1. 导入pickle泡菜模块. 2. wb方式(二进制)创建.pkl文件. 3. pickle.dump把一个数组或什么数据灌进这个新建的文件. 4. 然后就生成了一个pkl文件,用来存放数 ...