zoukankan      html  css  js  c++  java
  • Java集合总结(List、Map、Set)

    集合的引入

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

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

     1 public class Student {
     2  
     3     private String name;
     4     private Integer age;
     5      
     6     public Student() {
     7         super();
     8         // TODO Auto-generated constructor stub
     9     }
    10     public Student(String name, Integer age) {
    11         super();
    12         this.name = name;
    13         this.age = age;
    14     }
    15     public String getName() {
    16         return name;
    17     }
    18     public void setName(String name) {
    19         this.name = name;
    20     }
    21     public Integer getAge() {
    22         return age;
    23     }
    24     public void setAge(Integer age) {
    25         this.age = age;
    26     }
    27      
    28      
    29 }

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

    1 public class Test {
    2  
    3     public static void main(String[] args) {
    4         Student students[]=new Student[3];
    5         students[0]=new Student("张三",1);
    6         students[1]=new Student("李四",2);
    7         students[2]=new Student("王五",3);
    8     }
    9 }

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

    一、List集合

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

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

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

     1 import java.util.ArrayList;
     2  
     3 public class TestArrayLit {
     4  
     5     private static void pringArrayList(ArrayList<String> arrayList){
     6         System.out.println("当前的集合元素:");
     7         for(int i=0;i<arrayList.size();i++){
     8             System.out.println(arrayList.get(i));
     9         }
    10     }
    11      
    12     public static void main(String[] args) {
    13         ArrayList<String> arrayList=new ArrayList<String>();
    14         // 添加元素
    15         arrayList.add("张三");
    16         arrayList.add("李四");
    17         pringArrayList(arrayList);
    18         // 在指定位置插入元素
    19         arrayList.add(1, "小张三");
    20         pringArrayList(arrayList);
    21         // 元素的替换
    22         arrayList.set(2, "小李四");
    23         pringArrayList(arrayList);
    24         // 移除元素
    25         arrayList.remove(0);
    26         pringArrayList(arrayList);
    27     }
    28 }

    运行输出:

    当前的集合元素:

    张三

    李四

    当前的集合元素:

    张三

    小张三

    李四

    当前的集合元素:

    张三

    小张三

    小李四

    当前的集合元素:

    小张三

    小李四

     1 import java.util.LinkedList;
     2  
     3 public class TestLinkedList {
     4  
     5     private static void pringLinkedList(LinkedList<String> linkedList){
     6         System.out.println("当前元素的集合:");
     7         for(int i=0;i<linkedList.size();i++){
     8             System.out.print(linkedList.get(i)+" ");
     9         }
    10         System.out.println();
    11     }
    12      
    13     public static void main(String[] args) {
    14         LinkedList<String> linkedList=new LinkedList<String>();
    15         linkedList.add("张三");
    16         linkedList.add("李四");
    17         linkedList.add("王五");
    18         linkedList.add("李四");
    19         linkedList.add("赵六");
    20         pringLinkedList(linkedList);
    21          
    22         // indexOf 寻找位置
    23         System.out.println(linkedList.indexOf("李四"));
    24         pringLinkedList(linkedList);
    25          
    26         // peekFirst 获取第一个元素
    27         System.out.println(linkedList.peekFirst());
    28         pringLinkedList(linkedList);
    29          
    30         // peekLast 获取最后一个元素
    31         System.out.println(linkedList.peekLast());
    32         pringLinkedList(linkedList);
    33          
    34         // pollFirst 摘取第一个元素
    35         System.out.println(linkedList.pollFirst());
    36         pringLinkedList(linkedList);
    37          
    38         // pollLast 榨取最后一个元素
    39         System.out.println(linkedList.pollLast());
    40         pringLinkedList(linkedList);
    41     }
    42 }

    运行输出:

    当前元素的集合:

    张三 李四 王五 李四 赵六 

    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

    我们给下演示代码:

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

    运行输出:

    张三:10

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

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

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

    四、Set集合

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

    演示代码:

     1 import java.util.HashSet;
     2 import java.util.Iterator;
     3  
     4 public class TestHashSet {
     5  
     6     public static void main(String[] args) {
     7         /**
     8          * 1,HashSet是无序
     9          * 2,不循序有重复的值
    10          */
    11         HashSet<String> hs=new HashSet<String>();
    12         hs.add("21221");
    13         hs.add("112");
    14         hs.add("312");
    15         hs.add("421");
    16         hs.add("312");
    17          
    18         /**
    19          * 用Iterator遍历集合
    20          */
    21         Iterator<String> it=hs.iterator();
    22         while(it.hasNext()){
    23             String s=it.next();
    24             System.out.println(s+" ");
    25         }
    26     }
    27 }

    运行输出:

    112 

    421 

    312 

    21221 

  • 相关阅读:
    密码强度正则表达式 – 必须包含大写字母,小写字母和数字,至少8个字符等
    |DataDirectory|的使用
    SqlParameter的作用与用法
    C# 通过http post 请求上传图片和参数
    webuploader批量导入文件
    MVC使用Controller完成登录验证
    网页特效 模板素材
    C#中的Cookie 添加 读取 删除
    JS jquery jquery.wordexport.js 实现导出word
    初始配置JDK
  • 原文地址:https://www.cnblogs.com/zsh-blogs/p/10029545.html
Copyright © 2011-2022 走看看