//Implementing this interface allows an object to be the target of the "foreach" statement.
public interface Iterable<T>
{
/**
* Returns an iterator over a set of elements of type T.
*
* @return an Iterator.
*/
Iterator<T> iterator();
}
public interface Collection<E> extends Iterable<E>
{
}
//An ordered collection (also known as a <i>sequence</i>).
//Unlike sets, lists typically allow duplicate elements.
public interface List<E> extends Collection<E>
{
int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); Object[] toArray();
<T> T[] toArray(T[] a); boolean add(E e); boolean remove(Object o);
boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c);
boolean addAll(int index, Collection<? extends E> c); boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c); void clear(); boolean equals(Object o);
int hashCode(); E get(int index); E set(int index, E element); void add(int index, E element);
E remove(int index); int indexOf(Object o); int lastIndexOf(Object o); ListIterator<E> listIterator();
ListIterator<E> listIterator(int index); List<E> subList(int fromIndex, int toIndex);
}
//A collection that contains no duplicate elements
public interface Set<E> extends Collection<E> {}
////////////////////////////////////////////////////////////////
//LinkedList适合快速的增加 删除元素,是以 栈的形式管理数据,最先加的元素被压入栈底,后面 加的元素在栈顶,类似于StringBuilder,StringBuffer可以再内部修改结构,又不需要创建新的对象
LinkedList<Integer> linkedList = new LinkedList<Integer>();
linkedList.add(110);
linkedList.add(180);
linkedList.add(190);
System.out.println(linkedList);//[110, 180, 190]
// Pushes an element onto the stack represented by this list.
//In other words, inserts the element at the front of this list.
//This method is equivalent to addFirst() 它内部就是用addFirst()实现的.
linkedList.push(1);
System.out.println(linkedList);//[1, 110, 180, 190]
//This method is equivalent to removeFirst().
//它内部就是用 removeFirst()实现的.
linkedList.pop();
System.out.println(linkedList);//[110, 180, 190]
linkedList.add(1, 111);
linkedList.add(2, 222);
System.out.println(linkedList);//[110, 111, 222, 180, 190]
//系统方法add
public boolean add(E e) {
addBefore(e, header);
return true;
}
private Entry<E> addBefore(E e, Entry<E> entry) {
Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
size++;
modCount++;
return newEntry;
}
//系统方法remove
public E remove(int index) {
return remove(entry(index));
}
private E remove(Entry<E> e) {
if (e == header)
throw new NoSuchElementException();
E result = e.element;
e.previous.next = e.next;
e.next.previous = e.previous;
e.next = e.previous = null;
e.element = null;
size--;
modCount++;
return result;
}
//get 效率没有 arraylist 高,它要遍历每个元素
public E get(int index) {
return entry(index).element;
}
private Entry<E> entry(int index) {
if (index < 0 || index >= size)
throw new IndexOutOfBoundsException("Index: "+index+
", Size: "+size);
Entry<E> e = header;
if (index < (size >> 1)) {
for (int i = 0; i <= index; i++) //开始遍历
e = e.next;
} else {
for (int i = size; i > index; i--) //开始遍历
e = e.previous;
}
return e;
}
///////////////////////////////////////////////////////////////////arraylist 查询比较快,只要给index就可以查到
add remove 都要copy 耗资源 内存 比较慢
get 通过index就可以了,以数组的 形式
public E get(int index) {
RangeCheck(index);
return (E) elementData[index];
}
ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(110);
arrayList.add(120);
arrayList.add(0, 0);
System.out.println(arrayList);//[0, 110, 120] 看样子跟linkedlist一样,其实不一样,内部实现的方法不一样
//先看add 方法
public boolean add(E e) {
ensureCapacity(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
//再看里面的ensureCapacity(size + 1);
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);//把list copy 到 一个新的list
//一个原始数组的副本,截断或用null填充以获得指定的长度 这样很浪费资源 制造很多垃圾
}
}
/**
* Removes the element at the specified position in this list.
* Shifts any subsequent elements to the left (subtracts one from their
* indices).
*
* @param index the index of the element to be removed
* @return the element that was removed from the list
* @throws IndexOutOfBoundsException {@inheritDoc}
*/
public E remove(int index) {
RangeCheck(index);
modCount++;
E oldValue = (E) elementData[index];
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);//又要搞个副本 copy copy
elementData[--size] = null; // Let gc do its work
return oldValue;
}
//////////////////////////////////////////////////////////////hashset 乱序的,随便排的,不是按加入的先后顺序排的
add
Adds the specified element to this set if it is not already present. More formally, adds the specified element e to this set if this set contains no element e2 such that (e==null ? e2==null : e.equals(e2)). If this set already contains the element, the call leaves the set unchanged and returns false.
如果加的元素在集合里没有就加进去,return true
如果加的元素在集合里有 就不加进去,保持原来集合的状态 return false
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());//把hashset的值做为map的键值,得到它的hashcode
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
//遍历set的所有元素,先比hashcode 然后再比值 ,两者都符合则返回旧值
//不符合的话就加入set
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
hashset 取元素
Iterator<Integer> iterator = hashSet.iterator();
Integer next = iterator.next();
System.out.println(next);
for (int i = 0; i <hashSet.size(); i++)
{
if(iterator.hasNext())
System.out.println(iterator.next());
}
//remove比较麻烦 因为内部是以hashmap的原理实现的。hashset的值就是hashmap里的键值
//所以要知道删除元素是什么,不能通过index
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
///////////////////////////////////////////////////////////treeset 默认排序,不是按加入的先后顺序排序,是按int char....等
add
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
.....................................
remove比较麻烦,要知道值,不能通过index
public boolean remove(Object o) {
return m.remove(o)==PRESENT;
}
相关推荐
在Java编程语言中,集合框架是处理对象组的重要工具,主要包括`List`、`Set`和`Map`接口。这些接口及其实现类提供了丰富的功能,适用于各种数据存储和操作需求。`Set-List-Map.rar_DEMO_list set map`这个压缩包文件...
### 集合概述:set、List、Map #### 一、集合框架概述 ##### 1.1.1 容器简介 在Java编程中,集合框架是一个非常重要的概念,它提供了一种灵活的方式来存储、操作和管理不同类型的对象集合。集合框架的主要目标是...
根据给定文件的信息,我们可以详细地探讨一下Java中几种主要的集合容器——List、Set以及Map的区别,并且深入了解它们各自的特性和应用场景。 ### 一、List #### 1. ArrayList - **特点**:`ArrayList`是基于动态...
在Java编程语言中,集合框架是处理对象组的重要工具,主要包括List、Set和Map三大接口。这些接口由Java Collection Framework提供,它是一个统一的架构,用于存储和操作各种类型的对象。接下来,我们将深入探讨这三...
Collection 集合框架的顶级接口是 Collection,下面有三个主要的子接口:List、Set 和 Map。 List 集合是一种有序集合,可以存储重复元素,每个元素都有索引。ArrayList 和 LinkedList 是 List 集合的两个常用的...
其中,`Collection`、`List`、`Set`和`Map`是四大基本接口,它们各自代表了一种特定的数据结构,有着不同的特性和用途。下面我们将详细探讨这些接口的区别及其相关知识点。 首先,`Collection`是所有集合类的顶级...
本教程将深入探讨三种主要的集合类型:List、Set和Map,以及几种常用的循环语句,如forEach、map、where、any和every。这些概念对于理解Dart中的数据处理至关重要。 1. **List**: List是有序的元素集合,可以包含...
java集合类list-set-map.doc
在这个"DWR Demo"中,我们将会探讨如何使用DWR框架来处理和展示常见的数据结构,如List、Set和Map。 首先,让我们深入了解DWR的核心功能。DWR允许Java方法直接被JavaScript调用,就像它们是本地函数一样,无需手动...
在Java编程语言中,集合框架是处理对象组的重要工具,其中`List`、`Set`和`Map`是三大核心接口。本资料“Java list set map.zip”专注于讲解这些接口及其相关实现,帮助开发者深入理解Java集合类的使用。 首先,`...
// java中对象容器主要有Set,List和Map三个接口类。 // 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 // GOF给出的定义为:提供一种方法访问一个容器(container)对象中的各个元素, // 而又不需暴露该...
Java 集合框架中 List、Set、Map 的用法和区别 Java 集合框架(Java Collections Framework)是 Java 语言中的一个重要组件,提供了一些基本的数据结构和算法来操作和存储数据。其中,List、Set、Map 是三个非常...
### set、list、map的区别与联系 #### 一、概述 在Java编程语言中,`set`、`list`和`map`是非常重要的数据结构,它们分别代表了不同的集合类型,各自有着独特的特性与用途。 - **List**:有序集合,可以包含重复...
详细描述map、list、set的常用子类特性,各个场景的适用。
Java中List、Set和Map之间的区别 Java集合是Java编程语言中的一种重要数据结构,分为三种类型:Set(集)、List(列表)和Map(映射)。在Java中,List、Set和Map都是集合的实现类,它们之间有着本质的区别。 List...
自己写的例子,Java连接 redis 测试了string,list set ,map类型,以及中文测试,都正常,资源解释:http://www.cnblogs.com/aspirant/p/6816180.html
在Java编程语言中,集合框架是处理对象的重要工具,其中包括Set、List和Map三大接口。这些接口提供了多种数据结构和操作方法,使得开发者能够高效地组织和管理数据。 1. **Set接口**: Set接口表示一个不包含重复...
一般使用springjdbc、hibernate的sql查询,库获取到的数据都是List<Map, Object>>结果集,如果我们要转化为JavaBean,则需要做一系列的map.get(),然后obj.set()。 此工程中就是解决List<Map, Object>>转化为...
本文将深入探讨如何使用Java来操作Redis,包括设置和获取String、List和Map类型的数据,并且会介绍如何进行封装和单元测试。 首先,要与Redis进行交互,我们需要引入Jedis库,这是Java最常用的Redis客户端。在你的...
### Java中List、Set和Map的区别 在Java编程语言中,`List`、`Set`和`Map`是集合框架中的三个核心接口,它们分别代表了不同类型的集合数据结构,各自有着独特的特性和应用场景。 #### List `List`接口是最常用的...