当前位置:首页 » 文件传输 » list集合支持快速访问吗
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

list集合支持快速访问吗

发布时间: 2022-12-23 22:17:43

⑴ javaarraylist的方法有哪些

方法摘要

boolean add(E e)
将指定的元素添加到此列表的尾部。
void add(int index, E element)
将指定的元素插入此列表中的指定位置。
boolean addAll(Collection<? extends E> c)
按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。
boolean addAll(int index, Collection<? extends E> c)
从指定的位置开始,将指定 collection 中的所有元素插入到此列表中。
void clear()
移除此列表中的所有元素。
Object clone()
返回此 ArrayList 实例的浅表副本。
boolean contains(Object o)
如果此列表中包含指定的元素,则返回 true。
void ensureCapacity(int minCapacity)
如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
E get(int index)
返回此列表中指定位置上的元素。
int indexOf(Object o)
返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
boolean isEmpty()
如果此列表中没有元素,则返回 true
int lastIndexOf(Object o)
返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。
E remove(int index)
移除此列表中指定位置上的元素。
boolean remove(Object o)
移除此列表中首次出现的指定元素(如果存在)。
protected void removeRange(int fromIndex, int toIndex)
移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。
E set(int index, E element)
用指定的元素替代此列表中指定位置上的元素。
int size()
返回此列表中的元素数。
Object[] toArray()
按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。
<T> T[] toArray(T[] a)
按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
void trimToSize()
将此 ArrayList 实例的容量调整为列表的当前大小。

从类 java.util.AbstractList 继承的方法

equals, hashCode, iterator, listIterator, listIterator, subList

从类 java.util.AbstractCollection 继承的方法

containsAll, removeAll, retainAll, toString

从类 java.lang.Object 继承的方法

finalize, getClass, notify, notifyAll, wait, wait, wait

从接口 java.util.List 继承的方法

containsAll, equals, hashCode, iterator, listIterator, listIterator, removeAll, retainAll, subList

⑵ 请教,在List集合中怎么得到元素的索引值

写一个代码可以解决,代码如下:

⑶ java中对集合对象list的几种循环访问

的总结如下
1 经典的for循环View Code1publicstaticvoidmain(String[] args) {23List<String> list =newArrayList();4list.add("123");5list.add("java");6list.add("j2ee");7System.out.println("=========经典的for循环=======");8for(inti=0; i<list.size();i++){9System.out.println(list.get(i));10}11}
2 增强的for循环View Code1publicstaticvoidmain(String[] args) {23List<String> list =newArrayList();4list.add("123");5list.add("java");6list.add("j2ee");7System.out.println("=========Java1.6的for循环=======");8for(String s:list){9System.out.println(s);10}11}
3 Iterate的使用View Code1publicstaticvoidmain(String[] args) {23List<String> list =newArrayList();4list.add("123");5list.add("java");6list.add("j2ee");7System.out.println("=========Iterate循环=======");8Iterator<String> iter =list.iterator();9while(iter.hasNext()){10System.out.println(iter.next());11}1213}

⑷ 如何创建线程安全的list

一:使用synchronized关键字

二:使用Collections.synchronizedList()

⑸ list 接口的详解

List 接口继承了 Collection 接口以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。

(1) 面向位置的操作包括插入某个元素或 Collection 的功能,还包括获取、除去或更改元素的功能。在 List 中搜索元素可以从列表的头部或尾部开始,如果找到元素,还将报告元素所在的位置 :
void add(int index, Object element): 在指定位置index上添加元素element
boolean addAll(int index, Collection c): 将集合c的所有元素添加到指定位置index
Object get(int index): 返回List中指定位置的元素
int indexOf(Object o): 返回第一个出现元素o的位置,否则返回-1
int lastIndexOf(Object o) :返回最后一个出现元素o的位置,否则返回-1
Object remove(int index):删除指定位置上的元素
Object set(int index, Object element) :用元素element取代位置index上的元素,并且返回旧的元素
(2) List 接口不但以位置序列迭代的遍历整个列表,还能处理集合的子集:
ListIterator listIterator() : 返回一个列表迭代器,用来访问列表中的元素
ListIterator listIterator(int index) : 返回一个列表迭代器,用来从指定位置index开始访问列表中的元素
List subList(int fromIndex, int toIndex) :返回从指定位置fromIndex(包含)到toIndex(不包含)范围中各个元素的列表视图
“对子列表的更改(如 add()、remove() 和 set() 调用)对底层 List 也有影响。”
2.1.ListIterator接口
ListIterator 接口继承 Iterator 接口以支持添加或更改底层集合中的元素,还支持双向访问。ListIterator没有当前位置,光标位于调用previous和next方法返回的值之间。一个长度为n的列表,有n+1个有效索引值:

(1) void add(Object o): 将对象o添加到当前位置的前面
void set(Object o): 用对象o替代next或previous方法访问的上一个元素。如果上次调用后列表结构被修改了,那么将抛出IllegalStateException异常。
(2) boolean hasPrevious(): 判断向后迭代时是否有元素可访问
Object previous():返回上一个对象
int nextIndex(): 返回下次调用next方法时将返回的元素的索引
int previousIndex():返回下次调用previous方法时将返回的元素的索引
“正常情况下,不用ListIterator改变某次遍历集合元素的方向 — 向前或者向后。虽然在技术上可以实现,但previous() 后立刻调用next(),返回的是同一个元素。把调用 next()和previous()的顺序颠倒一下,结果相同。”
“我们还需要稍微再解释一下 add() 操作。添加一个元素会导致新元素立刻被添加到隐式光标的前面。因此,添加元素后调用 previous() 会返回新元素,而调用 next() 则不起作用,返回添加操作之前的下一个元素。”
2.2.AbstractList和AbstractSequentialList抽象类
有两个抽象的 List 实现类:AbstractList 和 AbstractSequentialList。像 AbstractSet 类一样,它们覆盖了 equals() 和 hashCode() 方法以确保两个相等的集合返回相同的哈希码。若两个列表大小相等且包含顺序相同的相同元素,则这两个列表相等。这里的 hashCode() 实现在 List 接口定义中指定,而在这里实现。
除了equals()和hashCode(),AbstractList和AbstractSequentialList实现了其余 List 方法的一部分。因为数据的随机访问和顺序访问是分别实现的,使得具体列表实现的创建更为容易。需要定义的一套方法取决于您希望支持的行为。您永远不必亲自提供的是 iterator方法的实现。
2.3. LinkedList类和ArrayList类
在“集合框架”中有两种常规的 List 实现:ArrayList 和 LinkedList。使用两种 List 实现的哪一种取决于您特定的需要。如果要支持随机访问,而不必在除尾部的任何位置插入或除去元素,那么,ArrayList 提供了可选的集合。但如果,您要频繁的从列表的中间位置添加和除去元素,而只要顺序的访问列表元素,那么,LinkedList 实现更好。
“ArrayList 和 LinkedList 都实现 Cloneable 接口,都提供了两个构造函数,一个无参的,一个接受另一个Collection”
2.3.1. LinkedList类
LinkedList类添加了一些处理列表两端元素的方法。

(1) void addFirst(Object o): 将对象o添加到列表的开头
void addLast(Object o):将对象o添加到列表的结尾
(2) Object getFirst(): 返回列表开头的元素
Object getLast(): 返回列表结尾的元素
(3) Object removeFirst(): 删除并且返回列表开头的元素
Object removeLast():删除并且返回列表结尾的元素
(4) LinkedList(): 构建一个空的链接列表
LinkedList(Collection c): 构建一个链接列表,并且添加集合c的所有元素
“使用这些新方法,您就可以轻松的把 LinkedList 当作一个堆栈、队列或其它面向端点的数据结构。”
2.3.2. ArrayList类
ArrayList类封装了一个动态再分配的Object[]数组。每个ArrayList对象有一个capacity。这个capacity表示存储列表中元素的数组的容量。当元素添加到ArrayList时,它的capacity在常量时间内自动增加。
在向一个ArrayList对象添加大量元素的程序中,可使用ensureCapacity方法增加capacity。这可以减少增加重分配的数量。
(1) void ensureCapacity(int minCapacity): 将ArrayList对象容量增加minCapacity
(2) void trimToSize(): 整理ArrayList对象容量为列表当前大小。程序可使用这个操作减少ArrayList对象存储空间。
2.3.2.1. RandomAccess接口
一个特征接口。该接口没有任何方法,不过你可以使用该接口来测试某个集合是否支持有效的随机访问。ArrayList和Vector类用于实现该接口。

⑹ java中list,set和map 的区别

List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序–否则应该使用List)。Map同样对每个元素保存一份,但这是基于”键”的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap. List的功能方法

实际上有两种List: 一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是具有一套更通用的方法。

List : 次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推荐LinkedList使用。)一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元素。

ArrayList : 由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。

LinkedList : 对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

Set的功能方法

Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)

Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。

TreeSet : 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

Map的功能方法

方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Object key)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。标准的Java类库中包含了几种不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。

执行效率是Map的一个大问题。看看get()要做哪些事,就会明白为什么在ArrayList中搜索“键”是相当慢的。而这正是HashMap提高速度的地方。HashMap使用了特殊的值,称为“散列码”(hash code),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法。

HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显着提高性能。

Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”

HashMap : Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。

LinkedHashMap : 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。

TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。

WeakHashMao : 弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。

IdentifyHashMap : 使用==代替equals()对“键”作比较的hash map。专为解决特殊问题而设计。

⑺ java 基础关于 list 集合问题

list2.add(list1); list1作为一个对象被传入(这时list2中只有一个值),当list1所包含的被clear,list1还在list2中,只是为空而已(list2中有个空的list1,list1为空)
list2.addAll(list1); 把list1中的包含元素做为list2自己的元素add ,你加了两个,自然传入的是两个值,这时clear list1,只是切断list1和两个元素之间的关系,并没有改变list2(这时list2有两个值,list1为空)
“就是想问下 add(Object o) 和 addAll(Collection c ); 的区别。”
这参数不同,还不是明显的区别么?

⑻ C# :数组 、ArrayList、List、链表、栈、队列,Hashset的不同Day0816

几种常见数据结构的使用情景 

Array   需要处理的元素数量确定并且需要使用下标时可以考虑,建议使用List<T>

ArrayList  不推荐使用,建议用List<T>

List<T>  需要处理的元素数量不确定时 通常建议使用

LinkedList  链表适合元素数量不固定,需要经常增减节点的情况,2端都可以增减 Queue 先进先出的情况

Stack 后进先出的情况

Dictionary 需要键值对,快速操作

1.数组

容量固定,类型固定

数组存储在连续的内存上,顺序存储结构 数组可以直接通过下标访问。

int[ ] myInt=new int[2,6,3];

创建一个新的数组时将在堆 中分配一块 连续的内存空间,来盛放数量为size ,类型为所声明类型的数组元素。如果类型为 值类型, 则将会有 size 个 未封箱 的 该类型的值被创建。如果类 型 为 引用类型 , 则将会有 size个相应类 型的 引用 被创建。

缺点 :由于是连续存储 ,所以在两个元素之间 插入新的元素就变得不方便 。声明一个新的数组时, 必须 指定其长度 ,这就会存在一个潜在的问题, 长度过长时,显然会浪费内存 ,长度过短的时候,则面 临这溢出 的风险。 这样不好!

2.ArrayList(这个不用,不安全)

容量不固定,类型不固定

ArrayList 中插入不同类型的数据是允许的。

ArrayList al = new ArrayList { 11, "string", 10.25 };

因为ArrayList会把所有插入其中的数据当作为 object类型 来处理,用ArrayList处理数据时,很可能会报类型不匹配的错误,也就是 ArrayList不是类型安全的 。在存储或检索值类型时通常发生 装箱和取消装箱操作,带来很大的性能耗损。

3.List(用这个)

容量不固定,类型固定

在声明List集合时,我们同时需要为其声 明List集合内数据的对象类型 。

它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于, 确保了 类型安全 。

List<int>  my List=new List<int >{11,22,33,66};

4. LinkedList链表

链表适合 元素数量不固定 ,需要 经常增减节点 的情况。

和数组最大的不同之处就是在于链表在内存存储的排序上可能是不连续的 。

这是由于链表是通过 上一个元素指向下一个元素来排列的,不能通过下标来访问 。

特点就是存储在 内存的空间不一定连续 ,那么链表相对于数组最大优势和劣势就显而易见了。

1.向链表中插入或删除节点无需调整结构的容量。因为本身不是连续存储而是靠各对象的指针所决定,所以添加元素和删除元素都要比数组要有优势。

2.链表适合在需要有序的排序的情境下增加新的元素,这里还拿数组做对比,例如要在数组中间某个位置增加新的元素,则可能需要移动移动很多元素,而对于链表而言可能只是若干元素的指向发生变化而已。

3.缺点,由于其在内存空间中不一定是连续排列, 所以访问时候无法利用下标,而是 必须 从头结点开始,逐次遍历下一个节点直到寻找到目标。所以当需要快速访问对象时,数组无疑更有优势。

5.Queue<T>

先进先出的线性表。 在Queue这种数据结构中,最先插入在元素将是最先被删除; 反之最后插入的元素将最后被删除,

通过使用Enqueue和Dequeue这两个方法来实现对 Queue的存取。

6.Stack<T>

后进先出的的线性表

默认容量为10。

使用pop和push来操作。

7.Dictionary<K,T>

字典的实现方式就是哈希表的实现方式,只不过 字典是类型安全的 ,也就是说当创建字典时,必须声明key和item的类。

缺点:以空间换时间,通过更多的内存开销来满足我们对速度的追求。在创建字典时,我们可以传入一个容量值,但实际使用的容量并非该值。而是使用 “不小于该值的最小质数来作为它使用的实际容量,最小是3

因此,我们面临的情况就是,即便我们新建了一个空的字典,那么伴随而来的是2个长度为3的数组。所以当处理的数据不多时,还是慎重使用字典为好,很多情况下使用数组也是可以接受的。

8.Hashset

这个集合类包含不重复项的无序列表

⑼ 集合接口 list、map、set 的存取速度问题

list 添加数据快, 支持顺序遍历, 但不能实现很快的随机访问;
set 没用过;
map 是一个树, 在访问和添加数据上效率比较平衡!