List接口、Set接口和Map接口

Java集合框架详解
本文详细介绍了Java集合框架中的主要接口,包括List、Set和Map,对比了它们的特点和应用场景,并探讨了不同实现类的特性,如ArrayList、LinkedList、HashSet、TreeSet等。

1、List和Set接口自Collection接口,而Map不是继承的Collection接口

	Collection表示一组对象,这些对象也称为collection的元素;一些 collection允许有重复的元素,而另一些则不允许;一些collection是有序的,而另一些则是无序的;JDK中不提供此接口的任何直接实 现,它提供更具体的子接口(如 Set 和 List)实现;Map没有继承Collection接口,Map提供key到value的映射;一个Map中不能包含相同key,每个key只能映射一个value;Map接口提供3种集合的视图,Map的内容可以被当做一组key集合,一组value集合,或者一组key-value映射;
2.、List接口	

元素有放入顺序,元素可重复 

List接口有三个实现类:LinkedList,ArrayList,Vector 

LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢 

ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低 

	元素有放入顺序,元素可重复 
	List是一种有序的Collection,可以通过索引访问集合中的数据,List比Collection多了10个方法,主要是有关索引的方法。
1).所有的索引返回的方法都有可能抛出一个IndexOutOfBoundsException异常
2).subList(int fromIndex, int toIndex)返回的是包括fromIndex,不包括toIndex的视图,该列表的size()=toIndex-fromIndex。
  • 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];
  • 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
  • 所有的List中可以有null元素,例如[ tom,null,1 ];
  • 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作;
3、Set接口
	元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
	Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet 
	SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)
	Query接口有一个实现类:LinkList 
	Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)
	Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
	HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。
	TreeSet : 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。
	LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
4、Map接口
	以键值对的方式出现的 

Map接口有三个实现类:HashMap,HashTable,LinkeHashMap 

HashMap非线程安全,高效,支持null;

HashTable线程安全,低效,不支持null 
SortedMap有一个实现类:TreeMap 

<think> 我们被问到:List, Set, Map 是否是接口? 回答:是的,ListSetMap都是Java中的接口。 详细解释: 在Java集合框架中,ListSetMap是三个核心接口,它们定义了一组通用的方法,具体的实现由各个类来完成。 1. List接口:代表有序、可重复的集合。 常见实现类:ArrayList, LinkedList, Vector 2. Set接口:代表无序、不可重复的集合。 常见实现类:HashSet, LinkedHashSet, TreeSet 3. Map接口:代表键值对的映射集合(注意:Map并不继承自Collection接口,它是一个独立的接口)。 常见实现类:HashMap, LinkedHashMap, TreeMap, Hashtable 我们可以通过代码来验证: ```java import java.util.List; import java.util.Set; import java.util.Map; public class CollectionInterfacesCheck { public static void main(String[] args) { // 验证ListSetMap接口 System.out.println("List is interface: " + List.class.isInterface()); System.out.println("Set is interface: " + Set.class.isInterface()); System.out.println("Map is interface: " + Map.class.isInterface()); } } ``` 运行结果: ``` List is interface: true Set is interface: true Map is interface: true ``` 解释: 上述代码使用反射机制检查ListSetMap是否为接口,输出结果均为true,证明它们都是接口。 另外,我们可以查看Java API文档: - List: https://docs.oracle.com/javase/8/docs/api/java/util/List.html - Set: https://docs.oracle.com/javase/8/docs/api/java/util/Set.html - Map: https://docs.oracle.com/javase/8/docs/api/java/util/Map.html 在文档中,可以看到它们都被明确声明为接口(interface)。 总结:ListSetMap都是接口,它们定义了集合的基本操作,具体的实现由具体的类来完成。 §§相关问题§§: 1. Java集合框架中,List接口的主要实现类有哪些? 2. Set接口List接口的主要区别是什么? 3. Map接口与Collection接口有什么关系? 4. 如何选择使用ListSetMap? </think> 是的,**ListSet Map 都是 Java 中的接口**,而不是具体实现类。它们在 Java 集合框架中扮演核心角色,定义了集合的基本行为规范。 ### 详细解释: #### 1. 三者都是接口 ```java // Java 集合框架核心接口定义 public interface List<E> extends Collection<E> { /* ... */ } // 有序、可重复集合 public interface Set<E> extends Collection<E> { /* ... */ } // 无序、不可重复集合 public interface Map<K,V> { /* ... */ } // 键值对映射 ``` #### 2. 接口与实现类的关系 | 接口 | 常见实现类 | 特点 | |------|------------|------| | `List` | `ArrayList`, `LinkedList`, `Vector` | 有序集合,允许重复元素 | | `Set` | `HashSet`, `TreeSet`, `LinkedHashSet` | 唯一元素集合,无重复 | | `Map` | `HashMap`, `TreeMap`, `LinkedHashMap` | 键值对映射,键唯一 | #### 3. 编程实践:使用接口声明变量 ```java import java.util.*; public class CollectionExample { public static void main(String[] args) { // 使用接口类型声明变量 ✅ 良好实践 List<String> names = new ArrayList<>(); names.add("Alice"); names.add("Bob"); Set<Integer> uniqueIds = new HashSet<>(); uniqueIds.add(101); uniqueIds.add(102); Map<String, Integer> scores = new HashMap<>(); scores.put("Alice", 95); // 直接使用实现类声明 ❌ 不够灵活 ArrayList<String> names2 = new ArrayList<>(); } } ``` #### 4. 接口的核心方法 ```java // List 核心方法 void add(int index, E element); E get(int index); // Set 核心方法 boolean add(E e); // 添加元素(自动去重) // Map 核心方法 V put(K key, V value); // 添加键值对 V get(Object key); // 根据键获取值 ``` ### 为什么设计成接口? 1. **解耦设计**:接口定义规范,实现类提供具体方案 ```java // 可灵活切换实现而不影响业务逻辑 List<String> data = new ArrayList<>(); // 改为:List<String> data = new LinkedList<>(); ``` 2. **多态支持**:同一接口不同实现 ```java void processList(List<String> list) { // 可接受任何List实现 } ``` 3. **标准化操作**:所有实现类遵循相同的方法签名 ### 类型体系总结 ```mermaid classDiagram class Collection~E~ { <<interface>> +add() +remove() } class List~E~ { <<interface>> +get() } class Set~E~ { <<interface>> } class Map~K,V~ { <<interface>> +put() +get() } Collection <|-- List Collection <|-- Set List <|.. ArrayList List <|.. LinkedList Set <|.. HashSet Set <|.. TreeSet Map <|.. HashMap Map <|.. TreeMap ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值