zoukankan      html  css  js  c++  java
  • java中常用集合的理解

      最近学习了java中常用集合类的一些知识,在这里作为一只小白,我来谈谈我的理解,顺带总结知识点。

    引入:在没有接触之前,听到集合,给我感觉是想到了数学中的集合一样,里面存放着一个一个的元素。其实不然,这个集合也就差不多,是用来存放元素的容器。


      Java中的集合类包含的内容很多而且很重要,很多数据的存储和处理(排序,去重,筛选等)都需要通过集合类来完成。

      今天我要谈的主要是,如下图所示:

    1.Collection

      Collection是最基本的集合类型,若要检查Collection中的元素,可以使用forEach遍历,也可以使用迭代器,实现了Collection接口的类,都可以这样操作。用法如下:

    package 集合;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class CollectionTest_1 {
        public static void main(String[] args) {
            Collection<String> collection = new ArrayList<String>();
            collection.add("苹果一");
            collection.add("苹果二");
            collection.add("苹果三");
            //第一种方式通过forEach遍历打印
            System.out.println("通过forEach遍历打印如下:");
            for(String str:collection){
                System.out.println(str);
            }
            System.out.println("-------------------------");
            //第二种方式通过iterator遍历打印
            System.out.println("通过iterator迭代器打印如下所示:");
            Iterator<String> it = collection.iterator();
            while(it.hasNext()){
                System.out.println(it.next());
            }
        }
    }

     1.1 List 接口

      List是Collection派生的接口,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引的位置来访问List中的元素,类似于Java数组。
    List允许有相同的元素存在。
      除了具有Collection接口必备的的iterator()方法外,还提供了listIterator()方法,放回一个 ListIterator接口。
      实现List接口的常用类有LinkedList、ArrayList、Vector和Stack,下面来简单介绍。

      1.1.1 ArrayList 类

      ArrayList从数据结构上来说,为顺序线性结构,用户若要对数据经常查阅或者是获取数据时,本类为用户的最佳选择类。常用方法:      add();addAll();get();size();set();remove();isEmpty();至于它们的例子,我就不一一举了,更多的方法可通过Api文档去查阅。

      1.1.2 LinkedList 类

       LinkedList实现了List类接口,允许null元素。此外LinkedList提供额外的add、get、remove、insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)
    LinkedList较ArrayList而言,若用户对数据经常进行插入或者是是删除之类的话,那么用本类为最优选择。

      1.1.3 Stack 类

      stack翻译过来为栈,在前面讲到堆栈模型的时候,我们就知道了它有先进后出的特点。
        Stack继承自Vector,实现了一个后进先出的堆栈。Stack提供了5个额外的方法使得Vector得以被当做堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,serach方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。
     
    请看下面的代码,简单理解Stack的常用方法:
     1 package 集合;
     2 
     3 import java.util.Stack;
     4 
     5 public class StackTest1 {
     6     public static void main(String[] args) {
     7         Stack<Integer> st = new Stack<Integer>();
     8         st.push(1);
     9         st.push(2);
    10         st.push(3);
    11         st.push(4);
    12         st.push(5);
    13         
    14         System.out.println(st.pop());//5  栈顶的那一个是一个最先出来的
    15         System.out.println("栈的长度为:"+st.size());//4 计算移除栈中的尺寸
    16         //st.peek();是指要将栈中的某一个元素拿出用,但它仍在栈中,栈中的长度与没执行这条语句之前是一样的
    17         System.out.println(st.peek());//4
    18         int value = st.peek();//4 将要用到集合中的值得时候,就用peek()方法
    19         int a =10;
    20         int result = value+a;//result=4+10=14
    21         System.out.println(result);//14
    22         System.out.print("栈的长度为:"+st.size());//4 计算移除栈中的尺寸
    23         
    24     }
    25 }

    输出结果为:

    5
    栈的长度为:4
    4
    14
    栈的长度为:4

    至于结果,代码中注释写的比较清楚了,这里我就不在说了。

    LinkedList可以被用作堆栈、队列等。举个例子:

    下面是一个LinkedList集合实现堆栈的代码:

     1 public class LinkedListTest1 {
     2     public static void main(String[] args) {
     3         LinkedStack ls = new LinkedStack();
     4         Apple apple1 = new Apple("苹果一");
     5         Apple apple2 = new Apple("苹果二");
     6         Apple apple3 = new Apple("苹果三");
     7         ls.push(apple1);
     8         ls.push(apple2);
     9         ls.push(apple3);
    10         
    11         System.out.println(ls.pop());
    12         System.out.println(ls.pop());
    13         System.out.println(ls.pop());
    14     }
    15 }
    16 class LinkedStack {
    17     private LinkedList<Apple> list = new LinkedList<Apple>();
    18     public void push(Apple apple){
    19         list.addLast(apple);
    20     }
    21     public Apple pop(){
    22         return list.removeLast();
    23     }
    24 }
    25 class Apple{
    26     String name;
    27     public Apple() {
    28     }
    29     public Apple(String name) {
    30         super();
    31         this.name = name;
    32     }
    33     public String getName() {
    34         return name;
    35     }
    36     public void setName(String name) {
    37         this.name = name;
    38     }
    39     @Override
    40     public String toString() {
    41         return "圣诞苹果 [name=" + name + "]";
    42     }
    43 }

    输出结果为:

    圣诞苹果 [name=苹果三]
    圣诞苹果 [name=苹果二]
    圣诞苹果 [name=苹果一]

    可以看到,先进后出的特点。

     1.2 Set

      Set是一种不包括重复元素的Collection,即它里面的任意两个元素a,b,都有a.equals(b)=false。

      很明显的可以知道Set有个约束条件,传入的collection参数不包含重复元素。

      1.2.1 HashSet

      哈希结构,特点是无序不重复,请看案例:

     1 public class HashSetTest_1 {
     2     public static void main(String[] args) {
     3         Set<String> set = new HashSet<>();
     4         set.add("第一个");
     5         set.add("第二个");
     6         set.add("第三个");
     7         set.add("第一个");
     8         set.add("第四个");
     9         System.out.println(set.size());//4
    10         for(String str:set){
    11             System.out.println(str);
    12         }
    13     }
    14 }

    输出结果:

    4
    第二个
    第四个
    第三个
    第一个

    可以看到:1.我在set中添加了五个元素,有相同的元素,值读出了一个。说明了不重复的特点。

                       2.输出的结果顺序,与我添加的顺序完全不同,则说明了它的无序特点。

    2.Map

      Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。

     2.1 HashMap

      多用于通过键值获取值得查询。与HashMap类似的有HashTable,这里就不祥说区别了。这个HashMap的用法,我就不贴代码了,请谅解。


      以上,就是作为一只小白,在最近学的知识,做出了自己的一点理解,文中如果有不对的地方,还请各位大佬们,给我指出来。

    需更多的了解和学习请进入:

    知了堂官网  www.zhiliaotang.com

  • 相关阅读:
    010-SaltStack及SaltStack Web UI安装部署
    004-linux下配置rsyslog日志收集服务器案例 rsyslog+loganalyzer日志服务器,无法添加报表模板解决
    003-centos7:rsyslog简单配置客户端和服务器端
    002-loganalyzer装完报错no syslog records found
    001-CentOS 7系统搭建Rsyslog+LogAnalyzer解决交换机日志收
    009(1)-saltstack之salt-ssh的使用及配置管理LAMP状态的实现
    009-saltstack之salt-ssh的使用及配置管理LAMP状态的实现
    008-saltstack之salt-ssh
    CentOS7+ 普通用户使用密钥登陆服务器(同时禁用root登陆)
    jq如何判断是否存在某个指定的style样式
  • 原文地址:https://www.cnblogs.com/mcxiaotan/p/8099083.html
Copyright © 2011-2022 走看看