Java集合
01 List:动态数组(元素个数未知)
package example;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
// 判断是否为空
System.out.println(list.isEmpty()? "list is empty." : "list is not empty.");
// 添加元素
list.add("World! ");
list.add(0,"Hello ");// 通过指定下标添加
list.add("I ");
list.add("am ");
list.add("learning ");
list.add("Java ");
System.out.println(list);// 打印list
// 通过下标访问
for(int i =0;i< list.size() ; i ++) {
System.out.print(list.get(i)+ "、");
}
System.out.println();
// 通过Iterator循环
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
System.out.print(iterator.next() + "、");
}
System.out.println();
// 通过For-Each遍历
for(String item:list) {
System.out.print(item+"、");
}
System.out.println();
System.out.println(list.isEmpty()? "list is empty." : "list is not empty.");
System.out.println("list长度:"+list.size());
System.out.println("更新前,下标为3的元素是:"+ list.get(3));
list.set(3, "do not ");// 更新下标为3的值;
System.out.println("更新后,下标为3的元素是:"+ list.get(3));
List<String> sub = list.subList(2, 5);
System.out.println("子列表sub的长度是:" + sub.size());
}
}
输出:
list is empty.
[Hello , World! , I , am , learning , Java ]
Hello 、World! 、I 、am 、learning 、Java 、
Hello 、World! 、I 、am 、learning 、Java 、
Hello 、World! 、I 、am 、learning 、Java 、
list is not empty.
list长度:6
更新前,下标为3的元素是:am
更新后,下标为3的元素是:do not
子列表sub的长度是:3
-
使用
ArrayList
时,继续添加元素,但是数组已满,没有空闲位置的时候,ArrayList先创建一个更大的新数组,然后把旧数组的所有元素复制到新数组,紧接着用新数组取代旧数组。 -
但是,实现List接口并非只能通过数组(即
ArrayList
的实现方式)来实现,另一种LinkedList
通过“链表”也实现了List接口。在LinkedList
中,它的内部每个元素都指向下一个元素:
我们来比较一下ArrayList
和LinkedList
:
02 Set:不含重复元素
package example;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
public class SetDemo {
public static void main(String[] args) {
Set<String> sets = new HashSet<String>();
// 判断是否为空
System.out.println(sets.isEmpty()? "Set is empty." : "Set is not empty.");
// 添加元素
sets.add("A");
sets.add("D");
sets.add("B");
sets.add("C");
sets.add("A");// 添加重复元素
sets.add("B");// 添加重复元素
// for each 遍历
for(String item:sets) {
System.out.print(item+"、");
}
System.out.println();
// Iterator遍历
Iterator<String> iterator = sets.iterator();
while(iterator.hasNext()) {
System.out.print(iterator.next()+"、");
}
System.out.println();
System.out.println(sets);// 打印sets
System.out.println(sets.isEmpty()? "Set is empty." : "Set is not empty.");
System.out.println("Set 的个数:" + sets.size());
System.out.println( "Set "+ (sets.contains("C") ? "" : "不" )+ "包含 C!" );
System.out.println( "Set "+ (sets.contains("E") ? "" : "不" )+ "包含 E!" );
sets.clear();// 清空sets
System.out.println(sets.isEmpty()? "Set is empty." : "Set is not empty.");
}
}
输出:
Set is empty.
A、B、C、D、
A、B、C、D、
[A, B, C, D]
Set is not empty.
Set 的个数:4
Set 包含 C!
Set 不包含 E!
Set is empty.
03 Map:键值对的集合
package example;
import java.util.Map;
import java.util.HashMap;
public class MapDemo {
public static void main(String[] args) {
Map<Integer,String> maps = new HashMap<>();
// 判断是否为空
System.out.println(maps.isEmpty()? "Map is empty." : "Map is not empty.");
// 添加元素
maps.put(1,"A");
maps.put(2,"B");
maps.put(3,"C");
maps.put(4,"D");
System.out.println(maps);// 打印maps
maps.put(1,"E");// 更新 键为1的值
System.out.println(maps);// 打印maps
System.out.println(maps.isEmpty()? "Map is empty." : "Map is not empty.");
System.out.println("Map 的个数:" + maps.size());
System.out.println( "Map "+ (maps.containsKey(3) ? "" : "不" )+ "包含键3!" );
System.out.println( "Map "+ (maps.containsValue("E") ? "" : "不" )+ "包含 值E!" );
System.out.println("键2对应的值是: "+ maps.get(2));// 获取键对应的值
maps.clear();// 清空maps
System.out.println(maps.isEmpty()? "Map is empty." : "Map is not empty.");
System.out.println(maps.get(2));
}
}
输出:
Map is empty.
{1=A, 2=B, 3=C, 4=D}
{1=E, 2=B, 3=C, 4=D}
Map is not empty.
Map 的个数:4
Map 包含键3!
Map 包含 值E!
键2对应的值是: B
Map is empty.
null
map的遍历
package example;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class MapDemo2 {
public static void main(String[] args) {
Map<Integer,String> maps = new HashMap<>();
// 添加元素
maps.put(1,"A");
maps.put(2,"B");
maps.put(3,"C");
maps.put(4,"D");
maps.put(1,"E");// 更新 键为1的值
// 通过keyset来遍历
Set<Integer> keys = maps.keySet();
for(Integer key : keys) {
System.out.println("key: " + key +" -> value:"+maps.get(key) );
}
System.out.println("------------------");
// 通过 entrySet来遍历
Set<Map.Entry<Integer, String>> keyValues = maps.entrySet();
for(Map.Entry<Integer, String> kv : keyValues) {
System.out.println("key: " + kv.getKey() +" -> value:"+kv.getValue() );
}
System.out.println("------------------");
// 通过Iterator来遍历
// TODO 由于maps.entrySet是一个Set,所以可以参考Set的遍历方法,使用Iterator来遍历
Iterator<Map.Entry<Integer, String>> iterator = maps.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry<Integer, String> kv = iterator.next();
System.out.println("key: " + kv.getKey() +" -> value:"+kv.getValue() );
}
}
}
输出:
key: 1 -> value:E
key: 2 -> value:B
key: 3 -> value:C
key: 4 -> value:D
------------------
key: 1 -> value:E
key: 2 -> value:B
key: 3 -> value:C
key: 4 -> value:D
------------------
key: 1 -> value:E
key: 2 -> value:B
key: 3 -> value:C
key: 4 -> value:D