List、Set和Map是Java中的三种基本数据结构,它们在元素重复性、有序性和用途方面存在显著的区别。
元素重复性:
List允许有重复的元素。任何数量的重复元素都可以在不影响现有重复元素的值及其索引的情况下插入到List集合中。
Set集合不允许元素重复。Set以及所有实现了Set接口的类都不允许重复值的插入,若多次插入同一个元素时,在该集合中只显示一个。
Map以键值对的形式对元素进行存储。Map不允许有重复键,但允许有不同键对应的重复的值。
元素的有序性:
List及其所有实现类保持了每个元素的插入顺序。
Set中的元素都是无序的。但是某些Set的实现类以某种殊形式对其中的元素进行排序,如:LinkedHashSet按照元素的插入顺序进行排序。
Map跟Set一样对元素进行无序存储,但其某些实现类对元素进行了排序。
用途:
List 集合中对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。
Map中的每一个元素包含一个键和一个值,成对出现,键对象不可以重复,值对象可以重复。
Set 集合中的对象不按照特定的方式排序,并且没有重复对象,但它的实现类能对集合中的对象按照特定的方式排序。
以下是List、Set和Map的简单例子:
List(列表)例子:
import java.util.ArrayList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("苹果");
list.add("香蕉");
list.add("橙子");
System.out.println("List: " + list);
}
}
Set(集合)例子:
import java.util.HashSet;
import java.util.Set;
public class SetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("苹果");
set.add("香蕉");
set.add("橙子");
set.add("苹果"); // 重复元素,Set不允许重复,所以只会保留一个"苹果"
System.out.println("Set: " + set);
}
}
Map(映射)例子:
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("苹果", 5);
map.put("香蕉", 3);
map.put("橙子", 7);
map.put("苹果", 10); // 键不允许重复,但值可以重复,所以"苹果"对应的值将会是10,之前的值5将会被覆盖。
System.out.println("Map: " + map);
}
}