Java 集合框架 : Collection接口

99封情书 提交于 2019-11-26 14:05:25

1. Collection接口是Java集合框架的基本接口,所所有集合都继承该接口。

  1.1 方法 :

    public interface Collection<E> extends Iterable<E> {
        //向集合添加元素,成功返回true,失败返回false
        boolean add(E e);
        //用于返回一个实现了Iterator接口的对象。
        Iterator<E> iterator();
        ...
    }

  1.2 Iterator 迭代器

    public interface Iterator<E> {
        //如果迭代器对象还有很多元素访问,返回true,
        boolean hasNext();
        //逐个访问集合中的每个元素,达到集合的末尾,
        //会抛出NoSuchElementException
        E next();

        default void remove() {
            throw new UnsupportedOperationException("remove");
        }

        default void forEachRemaining(Consumer<? super E> action) {
            Objects.requireNonNull(action);
            while (hasNext())
                action.accept(next());
        }
    }

  1.3 遍历集合

    方法1:用迭代器

        Collection<String> c = ...;
        Iterator<String> iterator = c.iterator();
        while (iterator.hasNext()){
            //iterator.next() 越过一个元素,并返回刚刚越过的那个元素
            String element = iterator.next();
            //在调用过next方法之后,才可以调用remove()方法,
            // 来删除刚刚越过的那个元素
            iterator.remove();
            ...
        }

    方法2:用for each

        Collection<String> c = ...;
        for (String element : c){
            do something with "element"...
        }

    方法3:java8 lambda表达式 forEachRemaning()

        Collection<String> c = ...;
        Iterator<String> iterator = c.iterator();
        iterator.forEachRemaining( ele -> {
            do something with "element"...
        });

     在删除元素时还可以调用一个更简单的方法:

        Collection<String> c = ...;
        c.removeIf(ele -> {
            if (ele ...){
                return true;
            }else {
                return false;
            }
        });

2. List 有序集合

  遍历元素的方法:

  2.1 迭代器访问 :适用链表结构集合

  2.2 整数索引访问——又称随机访问 :数组结构的集合

  2.3 ArrayList 数组结构 从中删除一个元素,之后所有的元素都要向前移动,开销很大,增加元素同理。

  2.3 LinkedList 链表结构 ,每个元素存储在独立的节点中,每个节点都有指向前一个元素和后一个元素的引用。

3.Set集 

  3.1 HashSet 散列集,实现了基于散列表的集 ,位置随机,无序集合。

    add() 

    contains() 用来查看某个元素是已经存在集中。

  3.2 TreeSet 树集 ,有序集合。树结构(红黑树 red-black tree)

import java.util.*;

/**
 * This program sorts a set of item by comparing their descriptions.
 * @version 1.12 2015-06-21
 * @author Cay Horstmann
 */
public class TreeSetTest
{
   public static void main(String[] args)
   {
      SortedSet<Item> parts = new TreeSet<>();
      parts.add(new Item("Toaster", 1234));
      parts.add(new Item("Widget", 4562));
      parts.add(new Item("Modem", 9912));
      System.out.println(parts);

      NavigableSet<Item> sortByDescription = new TreeSet<>(
            Comparator.comparing(Item::getDescription));

      sortByDescription.addAll(parts);
      System.out.println(sortByDescription);
   }
}

 

 

import java.util.*;

/**
 * An item with a description and a part number.
 */
public class Item implements Comparable<Item>
{
   private String description;
   private int partNumber;

   /**
    * Constructs an item.
    * 
    * @param aDescription
    *           the item's description
    * @param aPartNumber
    *           the item's part number
    */
   public Item(String aDescription, int aPartNumber)
   {
      description = aDescription;
      partNumber = aPartNumber;
   }

   /**
    * Gets the description of this item.
    * 
    * @return the description
    */
   public String getDescription()
   {
      return description;
   }

   public String toString()
   {
      return "[description=" + description + ", partNumber=" + partNumber + "]";
   }

   public boolean equals(Object otherObject)
   {
      if (this == otherObject) return true;
      if (otherObject == null) return false;
      if (getClass() != otherObject.getClass()) return false;
      Item other = (Item) otherObject;
      return Objects.equals(description, other.description) && partNumber == other.partNumber;
   }

   public int hashCode()
   {
      return Objects.hash(description, partNumber);
   }

   public int compareTo(Item other)
   {
      int diff = Integer.compare(partNumber, other.partNumber);
      return diff != 0 ? diff : description.compareTo(other.description);
   }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!