集合的引入

当我们有种需求,需要存储多个元素的结构时,我们前面讲过数组,数组可以存储。但是数组也有它的弊端,使用的时候,必须先定义好长度,也就是数组的长度是固定,不能根据我们的需求自动变长或者变短。

我们看一个实例:先定义一个Student类:

 public class Student {

     private String name;
private Integer age; public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
} }

然后我们需要存储三个学生信息:我们给下测试类:

 public class Test {

     public static void main(String[] args) {
Student students[]=new Student[3];
students[0]=new Student("张三",1);
students[1]=new Student("李四",2);
students[2]=new Student("王五",3);
}
}

这里我们很好的实现了用数组结构存储了三个学生,但是,假如我们需要再存储一个学生,就懵逼了,因为长度固定了。所以就引入了可变化长度的集合。

一、List集合

Collection接口是集合的老祖宗,定义了接口的基本方法,我们查看api 文档:

List是Collection接口的子接口,也是最常用的接口,此接口对Collection接口进行了大量的扩展,List集合里的元素是可以重复的。

List接口的主要实现类有ArrayList,和LinkedList。在数据量不大的情况下,这两个类性能差别不大,一般情况下,集合里的元素很少变化的,一般用ArrayList,假如集合里元素经常变动,要用LinkedList;底层实现有差别的。我们给下实例:

 import java.util.ArrayList;

 public class TestArrayLit {

     private static void pringArrayList(ArrayList<String> arrayList){
System.out.println("当前的集合元素:");
for(int i=0;i<arrayList.size();i++){
System.out.println(arrayList.get(i));
}
} public static void main(String[] args) {
ArrayList<String> arrayList=new ArrayList<String>();
// 添加元素
arrayList.add("张三");
arrayList.add("李四");
pringArrayList(arrayList);
// 在指定位置插入元素
arrayList.add(1, "小张三");
pringArrayList(arrayList);
// 元素的替换
arrayList.set(2, "小李四");
pringArrayList(arrayList);
// 移除元素
arrayList.remove(0);
pringArrayList(arrayList);
}
}

运行输出:

当前的集合元素:

张三

李四

当前的集合元素:

张三

小张三

李四

当前的集合元素:

张三

小张三

小李四

当前的集合元素:

小张三

小李四

 import java.util.LinkedList;

 public class TestLinkedList {

     private static void pringLinkedList(LinkedList<String> linkedList){
System.out.println("当前元素的集合:");
for(int i=0;i<linkedList.size();i++){
System.out.print(linkedList.get(i)+" ");
}
System.out.println();
} public static void main(String[] args) {
LinkedList<String> linkedList=new LinkedList<String>();
linkedList.add("张三");
linkedList.add("李四");
linkedList.add("王五");
linkedList.add("李四");
linkedList.add("赵六");
pringLinkedList(linkedList); // indexOf 寻找位置
System.out.println(linkedList.indexOf("李四"));
pringLinkedList(linkedList); // peekFirst 获取第一个元素
System.out.println(linkedList.peekFirst());
pringLinkedList(linkedList); // peekLast 获取最后一个元素
System.out.println(linkedList.peekLast());
pringLinkedList(linkedList); // pollFirst 摘取第一个元素
System.out.println(linkedList.pollFirst());
pringLinkedList(linkedList); // pollLast 榨取最后一个元素
System.out.println(linkedList.pollLast());
pringLinkedList(linkedList);
}
}

运行输出:

当前元素的集合:

张三 李四 王五 李四 赵六

1

当前元素的集合:

张三 李四 王五 李四 赵六

张三

当前元素的集合:

张三 李四 王五 李四 赵六

赵六

当前元素的集合:

张三 李四 王五 李四 赵六

张三

当前元素的集合:

李四 王五 李四 赵六

赵六

当前元素的集合:

李四 王五 李四

二、集合的遍历

前面我们讲了最简单的集合遍历用for循环。今天再介绍两个 Iterator和foreach;

首先是Iterator遍历器,我们给下实例:

先给一个Student类:

 1 public class Student {
2
3 private String name;
4 private Integer age;
5
6
7
8 public Student() {
9 super();
10 // TODO Auto-generated constructor stub
11 }
12 public Student(String name, Integer age) {
13 super();
14 this.name = name;
15 this.age = age;
16 }
17 public String getName() {
18 return name;
19 }
20 public void setName(String name) {
21 this.name = name;
22 }
23 public Integer getAge() {
24 return age;
25 }
26 public void setAge(Integer age) {
27 this.age = age;
28 }
29
30
31 }
 1 import java.util.Iterator;
2 import java.util.LinkedList;
3
4
5 public class TestIterator {
6
7 public static void main(String[] args) {
8 LinkedList<Student> list=new LinkedList<Student>();
9 list.add(new Student("张三",10));
10 list.add(new Student("李四",20));
11 list.add(new Student("王五",30));
12
13 /**
14 * 用Iterator遍历集合
15 */
16 Iterator<Student> it=list.iterator(); // 返回一个迭代器
17 while(it.hasNext()){
18 Student s=it.next(); // 返回迭代的下一个元素。
19 System.out.println("姓名:"+s.getName()+"年龄:"+s.getAge());
20 }
21 }
22 }

运行输出:

姓名:张三年龄:10

姓名:李四年龄:20

姓名:王五年龄:30

foreach遍历:

 1 import java.util.LinkedList;
2
3 public class TestForeach {
4
5 public static void main(String[] args) {
6 LinkedList<Student> list=new LinkedList<Student>();
7 list.add(new Student("张三",10));
8 list.add(new Student("李四",20));
9 list.add(new Student("王五",30));
10
11 /**
12 * 用foreach遍历
13 */
14 for(Student s:list){
15 System.out.println("姓名:"+s.getName()+"年龄:"+s.getAge());
16 }
17 }
18 }

运行输出:

姓名:张三年龄:10

姓名:李四年龄:20

姓名:王五年龄:30

三、Map集合

是存放一对值的最大接口,即接口中的每一个元素都是一对,以key->value键值对的形式保存;我们这里讲解下Map的常用实现类HashMap;

我们给下演示代码:

 import java.util.HashMap;
import java.util.Iterator; public class TestHashMap { public static void main(String[] args) {
HashMap<String,Student> hashMap=new HashMap<String,Student>();
hashMap.put("1号", new Student("张三",10));
hashMap.put("2号", new Student("李四",20));
hashMap.put("3号", new Student("王五",30)); // 通过key,获取value
Student s=hashMap.get("1号");
System.out.println(s.getName()+":"+s.getAge()); Iterator<String> it=hashMap.keySet().iterator(); // 获取key的集合,再获取迭代器
while(it.hasNext()){
String key=it.next(); // 获取key
Student student=hashMap.get(key); // 通过key获取value
System.out.println("key="+key+" value=["+student.getName()+","+student.getAge()+"]");
}
}
}

运行输出:

张三:10

key=3号 value=[王五,30]

key=2号 value=[李四,20]

key=1号 value=[张三,10]

四、Set集合

Set集合是Collection接口的子接口,没有对Collection接口进行扩展,里面不允许存在重复的内容;

演示代码:

 import java.util.HashSet;
import java.util.Iterator; public class TestHashSet { public static void main(String[] args) {
/**
* 1,HashSet是无序
* 2,不循序有重复的值
*/
HashSet<String> hs=new HashSet<String>();
hs.add("21221");
hs.add("112");
hs.add("312");
hs.add("421");
hs.add("312"); /**
* 用Iterator遍历集合
*/
Iterator<String> it=hs.iterator();
while(it.hasNext()){
String s=it.next();
System.out.println(s+" ");
}
}
}

运行输出:

112

421

312

21221

Java集合总结(List、Map、Set)的更多相关文章

  1. Java集合框架之map

    Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...

  2. Java 集合系列 15 Map总结

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  3. Java 集合系列 08 Map架构

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  4. Java集合框架之Map接口浅析

    Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...

  5. 【JAVA集合框架之Map】

    一.概述.1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...

  6. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  7. java集合框架07——Map架构与源代码分析

    前几节我们对Collection以及Collection中的List部分进行了分析,Collection中还有个Set,因为Set是基于Map实现的,所以这里我们先分析Map,后面章节再继续学习Set ...

  8. 「 深入浅出 」java集合Collection和Map

    本系列文章主要对java集合的框架进行一个深入浅出的介绍,使大家对java集合有个深入的理解. 本篇文章主要具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set ...

  9. Java集合 List,Set,Map

      一.List:.有顺序以线性方式存储,可以存放重复对象 线程安全方法:List list = Collections.synchronizedList(new LinkedList(...)); ...

  10. Java集合中的Map接口

    jdk1.8.0_144 Map是Java三种集合中的一种位于java.util包中,Map作为一个接口存在定义了这种数据结构的一些基础操作,它的最终实现类有很多:HashMap.TreeMap.So ...

随机推荐

  1. RHEL6 Systemtap 安装笔记

    以 RHEL6u3 为例 1  Systemtap 安装 yum install systemtap 跟systemtap有关的有6,7个,全装上,别偷懒 就用yum安装,别傻傻的去下rpm包,吃力不 ...

  2. pycharm 使用激活补丁永久激活+汉化

    提供激活补丁激活方式(推荐使用-使用期到2100年,基本永久啦) 破解补丁激活 1.下载 https://pan.baidu.com/s/1GehNMTXagUxUEted1DT-Pg 密码:6689 ...

  3. TortoiseGit的使用

    TortoiseGit只是一个外壳而已,它调用的是msysgit,相当于msysgit的windows gui而已,如果喜欢用git命令行,那就不需要安装它. 所以要先安装msysgit(window ...

  4. Idempotent --------幂等

    1.在某二元运算下,幂等元素是指被自己重复运算的结果等于它自己的元素.例如,乘法下唯一两个幂等实数为0和1.

  5. 【Python】【亲测好用】安装第三方包报错:AttributeError:'module' object has no attribute 'main'

    安装/卸载第三包可能出现如下问题及相应解决办法: 在pycharm编辑中,使用anconda2更新.卸载第三方包时,出现如下错误: AttributeError:'module' object has ...

  6. requests的post请求:百度翻译

    import json import requests class Trans(object): def __init__(self, juzi): self.juzi = juzi self.bas ...

  7. 帝国cms栏目别名怎样调用?栏目名称太短了

    在用帝国cms创建栏目时一般会填写栏目名称(较短)和栏目别名(为空则与栏目名相同),栏目别名可以设置长一些作为栏目标题,可是如何调用帝国cms栏目别名呢?默认的模板标题调用是<title> ...

  8. HTML方法

    HTTP 方法:GET 对比 POST 两种最常用的 HTTP 方法是:GET 和 POST. 什么是 HTTP ? 超文本传输协议(HTTP)的设计目的是保证客户端与服务器之间的通信. HTTP 的 ...

  9. end=‘’

    print('----------------') a = ['aa','bb','cc','dd','ee'] for i in range(len(a)): print(i,a[i])#默认换行 ...

  10. Directed Graph Loop detection and if not have, path to print all path.

    这里总结针对一个并不一定所有点都连通的general directed graph, 去判断graph里面是否有loop存在, 收到启发是因为做了[LeetCode] 207 Course Sched ...