- _nosay
集合类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都是线程同步的,所以它们的特点是效率低但是安全性高。