知了堂学习笔记java中常用集合的理解

Posted 小谭先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知了堂学习笔记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

 

以上是关于知了堂学习笔记java中常用集合的理解的主要内容,如果未能解决你的问题,请参考以下文章

知了堂学习笔记java 接口与抽象类

[知了堂学习笔记]_Java代码实现MySQL数据库的备份与还原

知了堂学习笔记java基础知识之继承

知了堂学习笔记java 编写几种常见排序算法

知了堂学习笔记java 正则表达式

[知了堂学习笔记]_初始化顺序