`

list set map

阅读更多

//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;
    }

分享到:
评论

相关推荐

    Set-List-Map.rar_DEMO_list set map

    在Java编程语言中,集合框架是处理对象组的重要工具,主要包括`List`、`Set`和`Map`接口。这些接口及其实现类提供了丰富的功能,适用于各种数据存储和操作需求。`Set-List-Map.rar_DEMO_list set map`这个压缩包文件...

    集合概述set、List、Map

    ### 集合概述:set、List、Map #### 一、集合框架概述 ##### 1.1.1 容器简介 在Java编程中,集合框架是一个非常重要的概念,它提供了一种灵活的方式来存储、操作和管理不同类型的对象集合。集合框架的主要目标是...

    List set map集合容器的区别

    根据给定文件的信息,我们可以详细地探讨一下Java中几种主要的集合容器——List、Set以及Map的区别,并且深入了解它们各自的特性和应用场景。 ### 一、List #### 1. ArrayList - **特点**:`ArrayList`是基于动态...

    Java_Collection_List-Set-Map.zip_list set map

    在Java编程语言中,集合框架是处理对象组的重要工具,主要包括List、Set和Map三大接口。这些接口由Java Collection Framework提供,它是一个统一的架构,用于存储和操作各种类型的对象。接下来,我们将深入探讨这三...

    List Set Map以及子类的比较 .docx

    Collection 集合框架的顶级接口是 Collection,下面有三个主要的子接口:List、Set 和 Map。 List 集合是一种有序集合,可以存储重复元素,每个元素都有索引。ArrayList 和 LinkedList 是 List 集合的两个常用的...

    Collection List Set Map 区别记忆

    其中,`Collection`、`List`、`Set`和`Map`是四大基本接口,它们各自代表了一种特定的数据结构,有着不同的特性和用途。下面我们将详细探讨这些接口的区别及其相关知识点。 首先,`Collection`是所有集合类的顶级...

    Dart 集合类型List Set Map详解 以及循环语句 forEach map where any every.zip

    本教程将深入探讨三种主要的集合类型:List、Set和Map,以及几种常用的循环语句,如forEach、map、where、any和every。这些概念对于理解Dart中的数据处理至关重要。 1. **List**: List是有序的元素集合,可以包含...

    java集合类list-set-map.doc

    java集合类list-set-map.doc

    dwr-demo.rar_DEMO_DWR DE_dwr Demo_list set map

    在这个"DWR Demo"中,我们将会探讨如何使用DWR框架来处理和展示常见的数据结构,如List、Set和Map。 首先,让我们深入了解DWR的核心功能。DWR允许Java方法直接被JavaScript调用,就像它们是本地函数一样,无需手动...

    Java-list-set-map.zip_Java list

    在Java编程语言中,集合框架是处理对象组的重要工具,其中`List`、`Set`和`Map`是三大核心接口。本资料“Java list set map.zip”专注于讲解这些接口及其相关实现,帮助开发者深入理解Java集合类的使用。 首先,`...

    java中set、list和map的使用方法实例

    // java中对象容器主要有Set,List和Map三个接口类。 // 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 // GOF给出的定义为:提供一种方法访问一个容器(container)对象中的各个元素, // 而又不需暴露该...

    List,set,Map 的用法和区别

    Java 集合框架中 List、Set、Map 的用法和区别 Java 集合框架(Java Collections Framework)是 Java 语言中的一个重要组件,提供了一些基本的数据结构和算法来操作和存储数据。其中,List、Set、Map 是三个非常...

    set,list,map区别与联系

    ### set、list、map的区别与联系 #### 一、概述 在Java编程语言中,`set`、`list`和`map`是非常重要的数据结构,它们分别代表了不同的集合类型,各自有着独特的特性与用途。 - **List**:有序集合,可以包含重复...

    JAVA集合map、list、set详解

    详细描述map、list、set的常用子类特性,各个场景的适用。

    Java中List Set和Map之间的区别_动力节点Java学院整理

    Java中List、Set和Map之间的区别 Java集合是Java编程语言中的一种重要数据结构,分为三种类型:Set(集)、List(列表)和Map(映射)。在Java中,List、Set和Map都是集合的实现类,它们之间有着本质的区别。 List...

    Redis java连接 list,string set map

    自己写的例子,Java连接 redis 测试了string,list set ,map类型,以及中文测试,都正常,资源解释:http://www.cnblogs.com/aspirant/p/6816180.html

    set.list.map接口

    在Java编程语言中,集合框架是处理对象的重要工具,其中包括Set、List和Map三大接口。这些接口提供了多种数据结构和操作方法,使得开发者能够高效地组织和管理数据。 1. **Set接口**: Set接口表示一个不包含重复...

    java中list、set和map 的区别

    ### Java中List、Set和Map的区别 在Java编程语言中,`List`、`Set`和`Map`是集合框架中的三个核心接口,它们分别代表了不同类型的集合数据结构,各自有着独特的特性和应用场景。 #### List `List`接口是最常用的...

    list,set,map,数组间的相互转换

    根据提供的标题、描述、标签及部分内容,我们可以详细探讨在Java中如何实现`List`、`Set`、`Map`以及数组之间的相互转换。这是一项在实际编程中非常实用且常见的需求,尤其对于处理数据结构变换时极为重要。 ### 1....

Global site tag (gtag.js) - Google Analytics