0%

Java集合

Java集合

本文介绍Java集合的数据结构,与简单测试。为后续学习算法打基础。

List

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.ArrayList;
import java.util.List;

public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("apple"); // size=1
list.add("pear"); // size=2
list.add("apple"); // 允许重复添加元素,size=3
System.out.println(list.size());
list.remove(1);//删除pear
System.out.println(list.size());
System.out.println(list.get(1));
}
}
1
2
3
3
2
apple

List是一种顺序列表接口常用方法:

  • 在末尾添加一个元素:boolean add(E e)
  • 在指定索引添加一个元素:boolean add(int index, E e)
  • 删除指定索引的元素:E remove(int index)
  • 删除某个元素:boolean remove(Object e)
  • 获取指定索引的元素:E get(int index)
  • 获取链表大小(包含元素的个数):int size()

Map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.HashMap;
import java.util.Map;

public class Test {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();

map.put("s","bbbbb");
map.put("a","aaaaa");
System.out.println(map.get("s"));//获取数据

for (String key : map.keySet()){ //遍历map
System.out.println(map.get(key));
}

}
}
1
2
3
bbbbb
aaaaa
bbbbb

Properties

Java默认配置文件以.properties为扩展名,每行以key=value表示。java内置Properties读取配置文件非常简单。

典型配置文件:

1
2
3
# setting.properties
last_open_file=1.txt
auto_save_interval=60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.FileNotFoundException;
import java.util.Properties;

public class Test {
public static void main(String[] args) throws FileNotFoundException,Exception{

String f = "配置文件";
Properties props = new Properties();
props.load(new java.io.FileInputStream(f));

String filepath = props.getProperty("last_open_file");
String interval = props.getProperty("auto_save_interval", "120");//如果没有值,赋予默认值

System.out.println(filepath);
System.out.println(interval);

}
}

1
2
1.txt
60

Set

只需要存储不重复的key,并不需要存储映射的value,那么就可以使用Set。

Queue

队列(Queue)是一种经常使用的集合。Queue实际上是实现了一个先进先出(FIFO:First In First Out)的有序表。它和List的区别在于,List可以在任意位置添加和删除元素,而Queue只有两个操作:

  • 把元素添加到队列末尾;
  • 从队列头部取出元素。

队列接口Queue定义了以下几个方法:

  • int size():获取队列长度;
  • boolean add(E)/boolean offer(E):添加元素到队尾;
  • E remove()/E poll():获取队首元素并从队列中删除;
  • E element()/E peek():获取队首元素但并不从队列中删除。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

import java.io.FileNotFoundException;
import java.util.*;


public class Test {
public static void main(String[] args) throws FileNotFoundException,Exception{

Queue<String> q = new LinkedList<>();
q.offer("aaaaaaa");
q.offer("bbbbbbb");
q.offer("ccccccc");

System.out.println(q.peek());//获取首位数据,不删除
System.out.println(q.peek());
System.out.println(q.peek());
System.out.println("-------------");
System.out.println(q.poll());//获取首位数据,并删除
System.out.println(q.poll());
System.out.println(q.poll());

}
}

1
2
3
4
5
6
7
aaaaaaa
aaaaaaa
aaaaaaa
-------------
aaaaaaa
bbbbbbb
ccccccc

Deque

两头都出,这种队列叫双端队列(Double Ended Queue),学名Deque。
Java集合提供了接口Deque来实现一个双端队列,它的功能是:

  • 既可以添加到队尾,也可以添加到队首;
  • 既可以从队首获取,又可以从队尾获取。

用处:Deque当Stack使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

import java.io.FileNotFoundException;
import java.util.*;


public class Test {
public static void main(String[] args) throws FileNotFoundException,Exception{

Deque<String> q = new LinkedList<>();
q.offerLast("aaaaaaa");
q.offerLast("bbbbbbb");
q.offerLast("ccccccc");

System.out.println(q.peekLast());//获取末位数据,不删除
System.out.println(q.peekLast());
System.out.println(q.peekLast());
System.out.println("-------------");
System.out.println(q.pollLast());//获取末位数据,并删除
System.out.println(q.pollLast());
System.out.println(q.pollLast());

}
}

1
2
3
4
5
6
7
ccccccc
ccccccc
ccccccc
-------------
ccccccc
bbbbbbb
aaaaaaa