集合的引入

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

我们看一个实例:先定义一个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. sublime安装install package

    通过 https://sublime.wbond.net/Package%20Control.sublime-package 下载packageControl文件 下载完成后,打开sublime te ...

  2. 2015 湘潭大学程序设计比赛(Internet)--D题-最小的数

    最小的数 Accepted : 47   Submit : 276 Time Limit : 1000 MS   Memory Limit : 65536 KB 题目描述 给你一个n位数,每次操作可以 ...

  3. 洛谷P2444 病毒 [POI2000] AC自动机

    正解:AC自动机 解题报告: 传送门! 首先看到这种题目二话不说先把trie树和fail指针建立起来 然后就想鸭,如果我们想让模式串和文本串尽量不能匹配,就要想办法让它跳fail指针,而不是继续往下走 ...

  4. 【Python】百度贴吧-中国好声音评论爬爬【自练OK-csv提取格式及评论提取空格等问题待改进】

    代码编写思路: 学习知识点: 1.class=a b(a假设是字体-宋体,b是颜色-蓝色:class中可以同时有两个参数a,b(宋体+蓝色),两者用空格隔开即可) 2.拓展1:想要soup到某个元素, ...

  5. MySQL完全卸载方法

    1.在控制面板里把Mysql正常卸载 2.C:\Documents and Settings\All Users\Application Data\MySQL 这里还有MySQL的文件,必须要删除 注 ...

  6. 对比jQuery和AngularJS的不同思维模式

    jQuery是dom驱动,AngularJS是数据驱动,这里有一篇文章阐述的非常好,建议看看 本文来自StackOverFlow上How do I “think in AngularJS” if I ...

  7. [LeetCode] 114. Flatten Binary Tree to Linked List_Medium tag: DFS

    Given a binary tree, flatten it to a linked list in-place. For example, given the following tree: 1 ...

  8. eigen 笔记2

    4. Block operations 1) Using block operations Block of size(p, q), starting at (i, j) dynamic-size b ...

  9. Linux系统——DHCP

    DHCP定义DHCP服务是负责IP.掩码.网关地址.DNS地址等自动分发的软件服务DHCP的分配方式(1)自动分配:分配到一个IP地址后永久使用(2)手动分配:由DHCP服务器管理员专门指定IP地址( ...

  10. 网络编程—代码—UDP数据报传输

    UDP:数据报传输 1.接收端 public class Udps { //接收端 public static void main(String[] args) throws IOException ...