集合的引入

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

我们看一个实例:先定义一个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. Master Boot Record

    https://en.wikipedia.org/wiki/Master_boot_record https://zh.wikipedia.org/wiki/主引导记录 A master boot r ...

  2. 兼容IE7以上的无缝滚动,带箭头、停顿

    <!DOCTYPE HTML><html> <head>        <meta charset="utf-8" />       ...

  3. 关于微信小程序,你想知道的他们都问了

    微信公开课深圳站小程序专场刚刚结束,大家通过"微信公开课+"互动小程序提出了许多问题.我们筛选了后台问得最多的九个问题进行解答,快来看看这里有没有你想要的答案吧! @谢杨:小程序是 ...

  4. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  5. 【深入理解javascript】执行上下文

    参考原文:执行上下文 1.每一个执行上下文,工作分为三个阶段: 准备阶段–>执行阶段–>调用阶段 准备阶段:代码执行之前,设置数据,相当于初始化. 执行阶段:开始执行每一行代码. 调用阶段 ...

  6. 配置tomcat通过客户端访问

    1:在tomcat    conf/tomcat-users.xml 文件里  配置用户名和密码,以及访问方式 For example, to add the manager-gui role to ...

  7. PAT 1067 Sort with Swap[难]

    1067 Sort with Swap(0,*) (25)(25 分) Given any permutation of the numbers {0, 1, 2,..., N-1}, it is e ...

  8. 024-linux中动态库libXXX.so

    1.动态库的概念.动态链接库与普通的程序相比而言,没有main函数,是一系列函数的实现.通过shared和fPIC编译参数生产so动态链接库文件.程序在调用库函数时,只需要连接上这个库即可. 2.动态 ...

  9. 终端FQ

    前言我一直以为全局FQ就是所有的都能够自由访问,没想到终端有时候却不行,这里终端一般指的是window的cmd和mac的Terminal.终端一般程序员用的比较多,下载第三方依赖啊,都需要,所以我总结 ...

  10. 机器学习中的范数规则化 L0、L1与L2范数 核范数与规则项参数选择

    http://blog.csdn.net/zouxy09/article/details/24971995 机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http: ...