List、Set、Map

一.list

list是集合中的一种,继承于Collection接口.简要就是list有序可重复,list中的每一个元素都有一个索引;首个索引为0.后面的则依次加1;常见的实现list集合的接口是:Arraylist,LinkedList,Vector和Stack.

Arraylist

Arraylist是一个动态数组,可插入Null,对于Arraylist它有一个初始容量:

private static final int DEFAULT_CAPACITY = 10;有扩容1.5

List接口中操作元素的方法许多都提供了index参数,这是与Collection接口中所提供相关方法的主要区别

LinkedList

inkedList类实现了List、Deque以及Queue接口。它提供了(双向)链表数据结构。所以它除了有ArrayList的基本操作方法外还额外提供了get,remove,insert方法在LinkedList的首部或尾部。

LinkedList具有两个构造方法:

LinkedList( )

LinkedList(Collection<? extends E> c)

ArrayList与LinkedList的区别:

1、ArrayList是基于数组结构的集合,有容量的概念;LinkedList是基于链表结构的集合,没有容量的概念

2、对于随机访问(get和set方法),ArrayList优于LinkedList,因为LinkedList要移动指针。

3、对于新增和删除操作(add和remove方法),LinkedList比较占优势,因为ArrayList要移动数据。但是如果只是在末尾追加元素,并且没有超出容量限制,则ArrayList的性能更好。不关容量的情况,效率差不多。

4、LinkedList 还实现了Queue接口,该接口比List提供了更多的方法,包括 offer(),peek(),poll()等。

 ArrayList 和 Vector 的区别是什么?

  • Vector是同步的,而ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList。
  • ArrayList比Vector快,它因为有同步,不会过载。
  • ArrayList更加通用,因为我们可以使用Collections工具类轻易地获取同步列表和只读列表。

二.set

HashSet接口

Set接口定义了组/集/集合(set)。它扩展了Collection接口,并声明了不允许重复元素的集合的行为。如果为集合添加重复的元素,add()方法会返回false。声明如下:

interface Set<E>

Set接口没有添加自己的方法。

SortedSet接口扩展了Set接口,并且声明了以升序进行排序的集合的行为。

interface SortedSet<E>

SortedSet定义了一些便于进行集合处理的方法。例如,为了获得集合中的第一个对象,可以调用first()方法。为了得到最后一个元素,可以使用last()方法。

NavigableSet接口扩展了SortedSet接口,并且该接口声明了支持基于最接近匹配原则检索元素的集合行为。

注意:

Set相关接口表示的集合没有索引的概念。

HashSet

HashSet类实现了Set接口。该类在内部使用哈希表存储元素。

哈希表使用称之为散列法(hashing)的机制存储信息。哈希法的优点是add()、contains()、remove()以及size()方法的执行时间保持不变,即使是对于比较大的集合也是如此。

HashSet( ) //默认容量是16

HashSet(int capacity)

HashSet(int capacity, float fillRatio) //填充率:0.0-1.0之间,默认0.75

HashSet(Collection<? extends E> c)

HashSet中元素不是按有序的顺序存储的,遍历输出HashSet中的元素时精确的输出可能不同。

 LinkedHashSet类

LinkedHashSet类扩展了HashSet类,它没有添加它自己的方法。

LinkedHashSet在内部使用一个链表维护元素添加到集合中的顺序,因此可以按照插入顺序迭代集合。

TreeSet类

TreeSet类实现了NavigableSet接口,该类在内部使用树结构存储元素。元素以升序存储,访问和检索相当快。TreeSet适合于存储大量的、必须能够快速查找到的有序信息。

Set与List的区别:

1、Set中的元素无序不能重复,List中的有序元素可以重复。

2、List有索引(下标)的概念,Set没有索引的概念。

3、对于Set表示的集合,通常是遍历操作,没有get()和set()方法。

注意:

TreeSet以升序保存对象,所以TreeSet中保存的对象比较能够比较大小,即TreeSet保存的对象类型必须实现Comparable接口。

注意:

HashSet是无序的,LinkedHashSet和TreeSet是有序的。

三.Map

映射(map)是存储键和值间关联(即,键值对)的对象。给定一个键,可以找到其值。键和值都是对象。键必须唯一,但是值可以重复。

支持映射的接口

接 口描 述
Map将唯一键映射到值
NavigableMap扩展SortedMap接口,以处理基于最接近匹配搜索原则的键/值对检索
SortedMap扩展Map接口,从而以升序保存键
Map.Entry描述映射中的元素(键/值对)

interface Map<K, V>

映射围绕两个基本操作:get()和put()。为了将值放入到映射中,使用put(),指定键和值。为了获取值,调用get(),传递键作为变元,值会被返回。

映射类

常用的映射类:HashMap、LinkedHashMap、TreeMap

 HashMap

HashMap实现了Map接口。它使用哈希表存储映射,即使对于比较大的集合,get()和put()的执行时间也保持不变。其声明如下:

class HashMap<K, V>

HashMap类定义了以下构造方法:

HashMap( )

HashMap(int capacity) //指定容量,默认是16

HashMap(int capacity, float fillRatio) //充填比率,0.0-1.0之间,默认0.75

HashMap(Map<? extends K, ? extends V> m)

Hashtable类也实现了Map接口,与HashMap类似。

 HashMap 和 Hashtable 有什么区别?

  • hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。
  • hashTable同步的,而HashMap是非同步的,效率上比hashTable要高。
  • hashMap允许空键值,而hashTable不允许。

//添加 键不能重复,如果已经存在 新的值会覆盖

map.put( . )

//取值

map.get()

//条数

map.size()

//修改

可以用map.put 健相同直接覆盖

//删除

map.ramove(键)

//先遍历键 在去找值 Set<String> strings = map. keySet () ; for (String str : strings) [ System. out. println(str) ; String s = map.get (str) ; System. out. println(s. length ()) : }

 LinkedHashMap

LinkedHashMap扩展了 Hashmap类,该类在内部使用一个表维护条目添加到 映射中的顺序,从而可以按照插入顺序选代整个映射

 TreeMap

TreeMap类扩展了 AbstractMap[类,并实现了

NavigableMap 接口。该类使用树 接口存储条目。TreeMap提供了有序存储键/值对的高效手段,并支持快速检索。应 当注意,TreeMap 确保其元素以键的升序存储

Hashtable

Hashtable类也实现了 Map 接口与 HashMap类似。

主要区别: 1、Hashtable是同步的、线程安全的,而 HashMap 不是同步的,没有实现线程 安全。 2、HashMap 允许将 nui 作为一个条目的 key 或者 value,而 Hashtable不允许。 当然只能有一个条目的键为 nul1。 3、HashMap把 Hashtable 的 contains 方法去掉了,改成 containsvalue和 contaimsKey。因为 contains 方法容易让人引起误解。

Map的遍历

映射不是集合,没有实现 Collection 接口。因此不能直接遍历映射。

Entry 接口是在 Map 接口的内部定义的,是内部接口。 在Map 中存储的元素是键-值对,一个键值对作为一个整体使用 Map.Entry 接口 表示。Map.Entry定义的方法:

使用entrvSet0方法,返回包含映射中所有元素(键-值对)的 Set 对象 使用 kexSet0,返回包含映射中所有键的 Set 对象。 使用 values0,返回包含映射中所有值的 Collection 对象 对于这三个集合视图都是基于映射的,修改其中的一个集合会影响其他集合。

  • 24
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值