集合类LinkedList,Vector,Stack以及HashMap的使用

2017-12-11 13:22:52

LinkedList

LinkedList和ArrayList非常相似,基本上是大同小异,请看下面代码

````
import java.util.ArrayList;
import java.util.LinkedList;

public class Hello {

public static void main(String[] args)
{
    LinkedList<Sp> linkedList = new LinkedList();
    Sp sp1 = new Sp("001","话梅",5f);
    Sp sp2 = new Sp("002","薯片",8f);

    linkedList.addFirst(sp1);
    linkedList.addFirst(sp2);
    for (int i = 0; i < linkedList.size(); i++) {
        System.out.println(linkedList.get(i).getName());
    }

}

}

class Sp
{

private String id;
private String name;
private Float price;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public Sp(String id, String name, Float price) {
    this.id = id;

    this.name = name;
    this.price = price;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Float getPrice() {
    return price;
}

public void setPrice(Float price) {
    this.price = price;
}

}

````

执行后结果为

  • 可见LinkdList中的addFirst方法是添加到最初
  • 自然LinkdList中的addLast方法是添加到最末,正好相反

它还拥有两个常用的方法,分别为
getFirst() 从第一个开始取
getLast() 从最后一个开始取

Vector和Stack

vector和ArrayList的使用非常相似,请看如下代码

vector

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Vector;

public class Hello {

    public static void main(String[] args)
    {

        Vector<Sp> vector = new Vector<>();
        Sp sp3 = new Sp("001","巧克力",20f);
        Sp sp4 = new Sp("002","果浦",10f);
        vector.add(sp3);
        vector.add(sp4);
        for (int i = 0; i < vector.size(); i++) {
            System.out.println(vector.get(i).getName());
        }

    }
}

class Sp
{
    private String id;
    private String name;
    private Float price;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Sp(String id, String name, Float price) {
        this.id = id;

        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Float getPrice() {
        return price;
    }

    public void setPrice(Float price) {
        this.price = price;
    }
}

stack

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Stack;
import java.util.Vector;

public class Hello {

    public static void main(String[] args)
    {

        Stack<Sp> stack = new Stack<>();
        Sp sp3 = new Sp("001","巧克力",20f);
        Sp sp4 = new Sp("002","果浦",10f);
        stack.add(sp3);
        stack.add(sp4);
        for (int i = 0; i < stack.size(); i++) {
            System.out.println(stack.get(i).getName());
        }

    }
}

class Sp
{
    private String id;
    private String name;
    private Float price;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Sp(String id, String name, Float price) {
        this.id = id;

        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Float getPrice() {
        return price;
    }

    public void setPrice(Float price) {
        this.price = price;
    }
}

基本上没什么好说的

HashMap
import java.util.*;

public class Hello {

    public static void main(String[] args)
    {

        HashMap hashMap = new HashMap();
        Sp sp1 = new Sp("001","香肠",20f);
        Sp sp2 = new Sp("002","果浦",10f);

        hashMap.put("001",sp1);
        hashMap.put("002",sp2);
        if (hashMap.containsKey("001"))
        {
            System.out.println("该食品信息为:");
            Sp sp = (Sp)hashMap.get("002");
            System.out.println(sp.getName());
            System.out.println(sp.getPrice());
        }else{
            System.out.println("对不起,没有该食品!");
        }



    }
}

class Sp
{
    private String id;
    private String name;
    private Float price;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Sp(String id, String name, Float price) {
        this.id = id;

        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Float getPrice() {
        return price;
    }

    public void setPrice(Float price) {
        this.price = price;
    }
}

我们发现,在添加的时候,不是add方法了,取而代之的是put方法,而且put中的第一个参数(键值)为唯一值,如果出现重复的情况,后面的会覆盖前面的,很像json字符串的那种形式。

下面是遍历方法,死记住就可以了

````

    Iterator it = hashMap.keySet().iterator();
    while (it.hasNext())
    {
        String key = it.next().toString();
        Sp sp = (Sp) hashMap.get(key);
        System.out.println("食品名称:" + sp.getName());
        System.out.println("食品价格:" + sp.getPrice());
    }

````

集合类的比较

前面记录了一些集合类,很多功能基本上都很相似,那么这些相似的集合类存在的价值是什么?

现在已知一些不同的地方,比如说LinkedList出栈入栈这个概念,HaspMap键值唯一性这个特性。
注意,键值是为了唯一标识事物而单独添加的属性,一定不要用事物本身的属性来做键值,List没有键值,而Map有键值

  • ArrayList 和 Vectory的区别与HashMap和Hashtable的区别相同,它们是:
  • ArrayList和HashMap都是线程异步的,所以它们的特点是效率高但是安全性低。
  • Vector和Hashtable都是线程同步的,所以它们的特点是效率低但是安全性高。