List,Set,Map有何区别?



List,Set,Map是否继承自Collection接口?

答:List,Set是,Map不是。

如图:

Collection

  ├List

  │├LinkedList

  │├ArrayList

  │└Vector

  │ └Stack

  └Set

  Map

  ├Hashtable

  ├HashMap

  └WeakHashMap

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java JDK不能提供直接继承自Collection的类,Java JDK提供的类都是继承自Collection的"子接口",如:List和Set。

注意:Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当做一组key集合,一组value集合,或者一组key-value映射。

详细介绍:

List特点:元素有放入顺序,元素可重复

Map特点:元素按键值对存储,无放入顺序

Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)

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

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

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

Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet

SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)

Query接口有一个实现类:LinkList

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

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

SortedMap有一个实现类:TreeMap

其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对

set 一般无序不重复.map kv 结构 list 有序

就个人而言.list 用的比较多. 其次map  最后set 至于什么情况下使用什么集合.看情况了. 也不好说.也没那么绝对.

看了下面的这个就更容易明白了

写一段代码,遍历一个List中的元素

List、Map、Set三个接口,存取元素时,各有什么特点?

import java.util.*;

public class Test

{

public static void main(String [] arge)

{

List list = new ArrayList();

list.add(0, "a");

list.add(1, "b");

list.add(2, "c");

list.add(3, "d");

while(Iterator it = list.iterator();it.hasNext())

{

Object element = it.next();

System.out.println (element);

}

}

}

List、Map、Set

List 通过下标来存取 和值来存取

Map 键值对应来存取

set 存取元素是无序的

--------------------------------------------------------------------

package com.operation;

import java.util.ArrayList;

import java.util.HashSet;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

import java.util.TreeSet;

public class User {

private Integer userId;

private String userName;

private String address;

public User(int userId, String userName, String address) {

this.userId = userId;

this.userName = userName;

this.address = address;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public Integer getUserId() {

return userId;

}

public void setUserId(Integer userId) {

this.userId = userId;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public static void main(String[] args) {

//   Map<Integer, User> map = new TreeMap<Integer, User>();

//   map.put(1, new User(1,"李伟","beijing"));

//   map.put(2, new User(2,"王文军","beijing"));

//

//   map.put(4, new User(2,"abc","beijing"));

//   map.put(5, new User(2,"abc","beijing"));

//

//

//

//   Set<Integer> keys = map.keySet();

//

////   Iterator<Integer> it = keys.iterator();

////   while (it.hasNext()) {

////    Integer key = it.next();

////    User user = map.get(key);

////    System.out.println("key = " + key + "\t" + "value = " + user.getUserName());

////   }

//

//   for (Integer key : keys) {

//    User user1 = map.get(key);

//    System.out.println("key = " + key + "\t" + "value = " + user1.getUserName());

//   }

Set<String> set = new HashSet<String>();

set.add("a");

set.add("b");

set.add("c");

set.add("d");

set.add("d");

set.add("d");

set.add("d");

set.add("uuu");

set.add("e");

Iterator<String> it = set.iterator();

while (it.hasNext()) {

System.out.println(it.next());

}

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 03:35:51

List,Set,Map有何区别?的相关文章

Java集合:List、Set和Map的区别,ArrayList和LinkedList有何区别..........

一.数组和集合的区别: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型): 集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. 数组和集合相比唯一的有点就是速度快. 二.Java集合分类: 1.Collection(接口):派生的两个子接口:List和Set List(列表):有序.可重复元素,可以插入多个null元素.实现List接口的常用类有LinkedList

android CMWAP, CMNET有何区别

什么是CMNET,什么是CMWAP? 答:CMWAP和CMNET只是中国移动为其划分的两个GPRS接入方式.中国移动对CMWAP作了一定的限制,主要表现在CMWAP接入时只能访问GPRS网络内的IP(10.*.*.*),而无法通过路由访问Internet,我们用CMWAP浏览Internet上的网页就是通过WAP网关协议或它提供的HTTP代理服务实现的. 因此,只有满足以下两个条件的应用才能在中国移动的CMWAP接入方式下正常工作: 1.应用程序的网络请求基于HTTP协议. 2.应用程序支持HT

Map/Reduce个人实战--生成数据测试集

背景: 在大数据领域, 由于各方面的原因. 有时需要自己来生成测试数据集, 由于测试数据集较大, 因此采用Map/Reduce的方式去生成. 在这小编(mumuxinfei)结合自身的一些实战经历, 具体阐述下生成测试数据集的Map/Reduce程序该如何写? 场景构造: 假设某移动电信行业的某具体业务, 其记录了通话信息(包括拨打方/接听方/通话时间点/基站 等要素). 产商是不可能提供真实的用户数据用于测试的, 但提供了基本的数据规格. 具体针对该业务场景, 我们简单规划如下: num1 v

ES6 Map/WeakMap

JS的对象本身就是个键值结构,ES6为什么还需要加Map呢,它与普通的JS对象有何区别? 一.Map 1. Map构造器 先看Map的简单用法 // 字符串作为key, 和JS对象类似 var map = new Map() // set map.set('name', 'John') map.set('age', 29) // get map.get('name') // John map.get('age') // 29 这么对代码,看起来确实没有JS对象简洁 但Map的强大之处在于它的ke

转载自搜狐科技【技术那些事儿】LTE网络中的用户数据库HSS与传统2G/3G的HLR有何区别?能否融合组网?

[技术那些事儿]LTE网络中的用户数据库HSS与传统2G/3G的HLR有何区别?能否融合组网? EPS HSS与HLR分别负责4G用户数据和2G/3G用户数据的存储,主要存在的两大不同为: (1)所存储数据不同,包括用户动态信息和静态签约数据,HSS存储用户4G动态信息(如用户4G位置信息),已经用户4G静态签约数据(如用户4G APN及QoS签约数据),HLR存储用户2G/3G动态信息(如用户2G/3G位置信息),以及用户2G/3G静态签约数据(如电信业务签约信息.补充业务业务签约信息.2G/

python练习之map()和reduce()函数

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字.输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']: 1 def normalize(name): 2 name=name.lower() 3 name=name[0].upper()+name[1:] 4 return name 5 6 7 8 9 10 # 测试: 11 L1 = ['adam', 'LISA', 'barT'] 12 L2 = l

ArrayList以及Map小练

ArrayList常用方法 public static void main(String[] args) { List list = new ArrayList(); List list1 = new ArrayList(); for (int i = 0; i < 5; i++) { list.add(i, "string"+i);//add(E e)向某集合的尾部追加 list1.add(i, "string"+(i+10)); } List list2

python之Map函数

# map()函数使用举例 # 功能:map()接受一个函数f和一个或多个list,将f依次作用在list的每个元素,得到一个新的列表 # 语法:map(方法名,列表,[列表2]) # 注意:map()函数的返回值需要强制转换成list类型,且不改变原列表值 list_1 = [1, 2, 3, 4, 5] list_2 = [1, 2, 3, 4, 5] # 单个参数 def double_function(number): return number * 2 list_result = li

14:Challenge 7(map大法好)

总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求数列中某个值出现了多少次 输入 第一行两个正整数N和M.第二行N的整数表示这个数列.接下来M行,每行开头是一个字符,若该字符为'M',则表示一个修改操作,接下来两个整数x和y,表示把x位置的值修改为y:若该字符为'Q',则表示一个询问操作,接下来一次整数x,表示求x这个值出现了多少次. 输出 对每一