虚线是接口,实线是实现类:

集合能够解决的问题:集合可以丽杰为是一种更高级的数组,可以保存多条数据

本质:java官方开发人员基于java的一些基础内容(数组等等)创建了一些接口和类,然后使用这些接口和类的对象来更加灵活的保存或处理多条数据。

Object是一个比较特殊的类型,在Java中有这样的一条设定,Object类是任何类的父类;

List:有序集合,类似与数组,也是给里面的元素进行了默认的排序,根据时间先后顺序排序的

用add方法向list里面添加元素,可以添加不同种类的元素

import java.util.ArrayList;
import java.util.List; public class App {
public static void main(String[] args){
/**
* 保存几个学习成绩,99,98,88,89
*/
//因为list是一个接口,所以右半边不可以写new List();必须写他的实现类
List list = new ArrayList(); //底层是一个数组 LinkedList底层是一个链表
list.add(99);
list.add(89);
list.add(88);
list.add(98);
System.out.println(list);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}

List和数组的区别:

1.集合中的数据类型是没有必然的要求的

2.这个list几个没有长度限制

ArrayList和LinkedList的区别:

List的泛形:指定某种类型,list 中只能存放指定的类型,比如下面的一个例子:存放一个Video类型的

package jihe;

public class Video {
private String name;
private String type; public Video(String name, String type) {
this.name = name;
this.type = type;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getType() {
return type;
} public void setType(String type) {
this.type = type;
}
}
package jihe;

import java.util.ArrayList;
import java.util.List; public class App {
public static void main(String[] args){ Video video1 = new Video("我不是药神","剧情");
Video video2 = new Video("风雨咒","动画");
Video video3 = new Video("延禧攻略","电视剧"); List<Video> list = new ArrayList<Video>();
list.add(video1);
list.add(video2);
list.add(video3); for(Video video:list){
System.out.println("名字是:"+video.getName()+",类型是:"+video.getType());
}
}
}

结果:

Set集合:无序集合,在放入元素时会有特点的算法为元素进行排序,但是这个算法我们猜测不到,跟先后顺序也无关。因此没有跟List一样的下标去表示里面元素,元素不可重复

package jihe;

import java.util.HashSet;
import java.util.Set; public class App {
public static void main(String[] args){ Video video1 = new Video("我不是药神","剧情");
Video video2 = new Video("风雨咒","动画");
Video video3 = new Video("延禧攻略","电视剧"); Set<Video> set = new HashSet<Video>();
set.add(video1);
set.add(video2);
set.add(video3); //循环只能用增强循环,因为无序,没有下标 for(Video video:set){
System.out.println("名字是:"+video.getName()+",类型是:"+video.getType());
}
}
}

结果:和上面的list不一样是无序的

Map集合:功能比较强大,Map是放入键(key)值(value)对的形式放入。

package jihe;

import java.util.*;

public class App {
public static void main(String[] args){ Video video1 = new Video("我不是药神","剧情");
Video video2 = new Video("风雨咒","动画");
Video video3 = new Video("延禧攻略","电视剧"); Map<String,Video> map = new HashMap<>();
map.put("我不是药神",video1);
map.put("风雨咒",video2);
map.put("延禧攻略",video3); for(String key : map.keySet()){
System.out.println("名字是:"+map.get(key).getName()+",类型是:"+map.get(key).getType());
}
}
}

Map的遍历4种方式:

package jihe;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; public class Test { /**
* 方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
*/
public void test(){ Map<Integer, Integer> map = new HashMap<>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
} /**
* 方法二 在for-each循环中遍历keys或values,
* 如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
* 该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。
*/
public void test1(){
Map<Integer, Integer> map = new HashMap<>();
//遍历map中的键
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}
//遍历map中的值
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}
} /**
* 方法三使用Iterator遍历,使用泛型:
*/
public void test2(){
Map<Integer, Integer> map = new HashMap<>();
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<Integer, Integer> entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
} /**
* 方法三使用Iterator遍历 ,不使用泛型
* 你也可以在keySet和values上应用同样的方法。
*
* 该种方式看起来冗余却有其优点所在。首先,在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。根据javadoc的说明,如果在for-each遍历中尝试使用此方法,结果是不可预测的。
*
* 从性能方面看,该方法类同于for-each遍历(即方法二)的性能。
*/
public void test3(){ Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
}
} /**
* 方法四、通过键找值遍历(效率低)
*/
public void test4() {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}
} }

总结

如果仅需要键(keys)或值(values)使用方法二。如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。否则使用方法一(键值都要)。

java的集合:List、Set和Map的更多相关文章

  1. java的集合框架set 和map的深入理解

    Java的集合框架之Map的用法详解 Map有两种比较常用的实现:HashMap 和 TreeMap. HashMap: HashMap 也是无序的,也是按照哈希编码来排序的,允许使用null 值和n ...

  2. 【Java】集合概述Collection、Map

    Java集合分为Collection和Map,Collection又分为List.Set. List中有ArrayList.LinkedList和Vector:Set中又分为HashSet和TreeS ...

  3. java学习——集合框架(泛型,Map)

    泛型: ... Map:一次添加一对元素.Collection 一次添加一个元素. Map也称为双列集合,Collection集合称为单列集合. 其实map集合中存储的就是键值对. map集合中必须保 ...

  4. 【Java】集合遍历--List和Map的多种遍历方式

    1. List的两种遍历方式 package com.nova.test; import java.util.ArrayList; import java.util.Iterator; import ...

  5. 【Java】集合_学习笔记

    一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...

  6. Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)

    概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转 ...

  7. Java基础(40):Java中的集合介绍---Collection与Map

    集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap ...

  8. Android(java)学习笔记105:Map集合的遍历之键值对对象找键和值

    package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...

  9. Android(java)学习笔记104:Map集合的遍历之键找值

    package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...

  10. Android(java)学习笔记103:Map集合的获取功能

    package cn.itcast_01; import java.util.Collection; import java.util.HashMap; import java.util.Map; i ...

随机推荐

  1. ext整合highcharts实现饼图

    extjs自身有图表的功能,但是与highcharts和echarts相比,ext不如它们功能强大.样式美观. 公司项目的前端框架使用的是ext,所以就有了ext整合第三方图表插件的需求. 笔者会一点 ...

  2. Oracle下载与Oracle安装图解(Oracle19c,Oracle18c,Oracle12c,Oracle11g)

    Oracle下载与Oracle安装图解(Oracle19c,Oracle18c,Oracle12c,Oracle11g) 1.Oracle下载(Oracle11g) oracle下载方法,请根据以下步 ...

  3. Django-2- 模板路径查找,模板变量,模板过滤器,静态文件引用

    模板路径查找 路径配置 2. templates模板查找有两种方式 2.1 - 在APP目录下创建templates文件夹,在文件夹下创建模板 2.2 - 在项目根目录下创建templates文件夹, ...

  4. python内存回收的问题

    python实际上,对于占用很大内存的对象,并不会马上释放. 举例,a=range(10000*10000),会发现内存飙升一个多G,del a 或者a=[]都不能将内存降下来.. del 可以删除多 ...

  5. 工作中遇到的一些linux常用命令总结

    零.查看历史命令,linux中可按“↑” “↓”查找之前输入的命令,亦可用 history 命令查看之前的输入,linux中的亦有“Tab”键可联想输入 一.root权限: 1.su 之后输入root ...

  6. Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候,当时,看了一下官方的文档,大概是类似Sikuli的一个工具,主要用来做游戏自动化的,通过截图的方式用来解决游戏自动化测试的难题.最近,移动端测试的同事尝试用 ...

  7. [OIDC in Action] 3. 基于OIDC(OpenID Connect)的SSO(添加Github OAuth 2.0的支持)

    在上上一篇基于OIDC的SSO的登录页面的截图中有出现QQ登录的地方.这个其实是通过扩展OIDC的OpenID Provider来实现的,OpenID Provider简称OP,OP是OIDC的一个很 ...

  8. Characterization of Dynkin diagrams

    Nowadays, I am reading D.J.Benson's nice book, volume I of Representations and cohomology. I found i ...

  9. IDEA快捷建使用

    因为以前使用的IDE工具是Eclipse,所以在公司中都是用IDEA的情况下,换成了IDEA,感觉是好用了很多. 其他快捷键: Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表 ...

  10. [安全转帖]浅析安全威胁情报共享框架OpenIOC

    浅析安全威胁情报共享框架OpenIOC https://www.freebuf.com/sectool/86580.html Indicator of compromise Outline: 1. I ...