zoukankan      html  css  js  c++  java
  • collection总结

    一、collection集合

    1,add(E o)添加

    2,addAll(Collection<? extends E> c)添加集合

    3,clear()清除所有集合内容

    4,contains比较集合中的元素,如果有则返回true(String字符串也存在这种方法,用来判断一个字符串)

    5,containsAll比较集合中是否存在一个集合

    6,isEmpty如果collection中不包含此元素,则返回true

    7,iterator集合迭代器,用来取出集合中的元素Iterator it=list.iterator

    8,romove,移除collection集合中的元素

    9,removeAll移除collection集合元素中的一个集合

    ================================

    1)list为collection的子类接口,为有序集合,除了以上方法以外,list独有的方法有

    1,get返回列表中的指定位置的元素

    2,add(int index, E element)在指定位置插入元素

    3,addAll(int index, Collection<? extends E> c)在指定位置插入一个collection的元素

    4,set(int index, E element)   替换指定位置的元素(可选操作)。

    5,subList(int fromIndex, int toIndex)  截取collection集合中的元素

    6,contains(Object o) 用contains方法查找collection中的元素,若有,则返回 true。

    7,切记:list为有序接口,若要用角标掉调元素,则可以选择list接口

    ********************************************

    a) ArrayList

       方法基本不变      

      b)LinkedList为list的子类方法,其特有方法如下:

       1,addFirst(E o) 将给定元素插入此列表的开头  

        2,addLast(E o)将给定元素追加到此列表的结尾。     

        3,contains(Object o) 如果此列表包含指定元素,则返回 true。

        4,element()  找到但不移除此列表的头(第一个元素)。

        5,get(int index)  返回此列表中指定位置处的元素。  

        6,getFirst() 返回此列表的第一个元素。

        7,getLast()  返回此列表的最后一个元素。                      

        8,listIterator(int index)

              返回此列表中的元素的列表迭代器(按适当顺序),从列表中指定位置开始    

          ****************************************

    2)set为collection集合中的子类,为无序列表,但是,set的子类接口可以实现有序列表

    1,hashCode()  利用哈希码值查找元素速度快,返回 set 的哈希码值

        2,isEmpty() 查找collection集合中set列表的元素,切记:如果不包含元素,则返回 true。

        3,iterator() collection集合的迭代器,在set方法中去元素只有一种方法就是迭代器方法

         Iterator it=set.itrator  返回在此 set 中的元素上进行迭代的迭代器  .

        4,包含子类HashSet子类和TreeSet子类     

    ******************************************************

           a)TreeSet为set列表的子类其特有方法

           TreeSet必须做 implements Comparable比较器继承

                  若要按其他比较则需要做其他的比较器

           ===============================================================

          例:比较器:

           public class Person implements Comparable<Person> {

            public int compareTo(Person obj)

    {

    Person p=(Person)obj;

    int temp=this.age-p.age;

    return temp==0?this.name.compareTo(p.name):temp;

    }

           ================================================================

           例:比较器:

           import java.util.Comparator;

    import bean.Person;

    public class ComparetorByName implements Comparator<Person> {

    public int compare(Person o1, Person o2) {

    int temp=o1.getName().compareTo(o2.getName());

    return temp==0?o1.getAge()-o2.getAge():temp;

    }

    }   

    ============================================================================

    系统自动生成比较器:

    姓名比较:

    @Override

    public int hashCode() {

    final int prime = 31;

    int result = 1;

    result = prime * result + age;

    result = prime * result + ((name == null) ? 0 : name.hashCode());

    return result;

    }

    年龄比较:

    @Override

    public boolean equals(Object obj) {

    if (this == obj)

    return true;

    if (obj == null)

    return false;

    if (getClass() != obj.getClass())

    return false;

    Person other = (Person) obj;

    if (age != other.age)

    return false;

    if (name == null) {

    if (other.name != null)

    return false;

    } else if (!name.equals(other.name))

    return false;

    return true;

    }

    ================================================================

           构造一个新的空 set,该 set 按照元素的自然顺序排序。

           TreeSet(Comparator<? super E> c)  构造一个新的空 set,该 set 根据指定的比较器进行排序。

             此方法需要继承比较器

            1,comparator() 返回用于确定已排序 set 顺序的比较器,

            或者,如果此树 set 使用其元素的自然顺序,则返回 null。

          2,last() 返回已排序 set 中当前的最后一个(最大)元素。   

            3, first()返回已排序 set 中当前的第一个(最小)元素。

            4,根据使用的构造方法不同,可能会按照元素的自然顺序 进行排序

        (b)HashSet方法基本与set方法相同

    ================================================================         

    map集合Map<K,V>

    1)map集合一次添加一对元素,collection集合一次添加一个元素

    所以map集合为双列集合,collection为单列集合

    map集合存储的的是键值对

    map集合必须保证键的唯一性

    常用方法:

    1,添加

    value put(key ,value);

    key与value一一对应,value有值则返回旧值,没有则返回null

    返回前一个与key关联的值,没有则返回null

    2,删除

    void clear();

    value remove(key):根据指定的key返回键值对

    3,判断

    boolean containsKey(Key);

    boolean containsValue(Value);

    boolean isEmpty();

    4,获取

     value get(key);通过键获取值,如果没有该键则返回null。

     可以通过返回null,来判断是否包含此键()

     (存入k1,v1,通过k1查找v1,可以找到,通过k2查找v2返回null,则此集合中不包含k2)

     int size()获取键值对的个数。

    一,keyset   map的取出方法一;

    原理是,通过keyset方法获取map的所有键所在的set集合,在通过set的迭代器获取每一个键

    再对每一个键获取对应的值即可

    keySet() 返回此映射中包含的   键   的 set 视图

    二,entrySet  map的取出方法二;

    通过Map转成set就可以迭代

    找到另一个方法。entrySet。

    该方法将键值映射关系作为对象存储到set集合中,而这个映射关系的类型就是Map.Entry类型(结婚证)

    entrySet() 返回此映射中包含的    映射关系    的 set 视图

            Entry为 Map的成员接口  

            Entry规则依附于Map规则,只有Map实现以后才可以调用entry方法

            Map.Entry为嵌套接口

        三,map.values();可以不通过键而取到所有的值

           Collection<String> values=map.values();//返回值为集合所以调用collection

    Iterator<String> it= values.iterator();//跌倒得到的String类型的values

    while(it.hasNext())

    {

    System.out.println(it.next());

    }

    Map的常用子类:(什么叫做同步。什么叫不同步)

          Hashtable:内部结构是哈希表,为同步的;表中的键和值不可以为null

           Properties :用来存储键值对型的配置文件的信息可以和IO技术相结合;

          HashMap:内部结构为哈希表,为非同步,表中的键和值都可以为null

          

          TreeMap:内部结构是二叉树,可以对内部结构的键进行排序

    ====================================================================  

    泛型:(直接收引用数据类型,引用数据类型,不是类就是接口)

        JDK1.5以后出现的安全特性

        好处:

        1.将运行时的问题ClassCastException转到了编译时期(黄色警告)

    2.避免了强转的麻烦

    <>当应用数据不确定是使用<>,将要操作的数据类型传入即可。

    其实<>就是一个用来接收具体引用数据类型的参数范围

    void show(int x)

    class ArrayList<E>

    void show(int x,int y)

    class Map<K, V>

    在程序中只要用到了带有<>的类或者接口,就要明确传入的具体应用数据类型。

    泛型技术是给编译器用的技术,用于编译时期,确保数据类型安全。

    ************************************************************

    运行时会将泛型去掉,生成的class文件不带泛型,叫泛型的擦除

    为什么擦除

    因为为了兼容运行时的类加载器

    泛型的补偿

    在运行时,通过获取元素的类型进行转换动作,不用使用者再强制装换了

    *************************************************************

    集合技巧:

    需要唯一元素吗?

    需要:set

    需要指定顺序吗

    需要:TreeSet

    不需要:HashSet

    但是要想一个和存储一致的顺序(有序):LinkedSashSet

    不需要:List

    需要频繁增删吗

    需要:LinkedList

    不需要:ArrayList

    如何记住每个容器的结构和体系:

    List:

    ArrayList

    LinkedList

    Set:

    HashSet

    TreeSet

    后缀为集合体系

    前缀名为集合的数据结构;

    看到Array就要想到数组,查询快有角标

    看到link就要想打链表,想到增删快,想到add get remove+first last的方法

    看到hash就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashcoed方法和equals方法

    看到tree就像到二叉树,就要想到排序呢,就要想到两个接口comparable。comparator.

    通常常用的集合都是不同步的

    vector

    ========================================================================

    List list = new ArrayList();//非同步的;

    list= MyCollections.synList(list);//返回一个同步的list

    给非同步集合加锁

    class MyCollections{

    public List synList(List list){

    }

    private class MyList implements List{

    private List list;

    private static final Object lock =new Object();

    MyList(List list){

    this.list=list

    }

    public boolean add(object obj)

    {

    return list.add(obj);

    }

    }

    public boolean remove(object obj)

    {

    synchronized(lock)

    {

    return list.remove(obj);

    }

    }

    }

    }

    Collections的方法中已有加锁的方法可以在集合框架的工具类中直接查找调用

    synchronizedCollection(Collection<T> c)

  • 相关阅读:
    HDU 1075 What Are You Talking About(字典树)
    HDU 1075 What Are You Talking About (stl之map映射)
    HDU 1247 Hat’s Words(字典树活用)
    字典树HihoCoder
    HDU 1277全文检索(字典树)
    HDU 3294 Girls' research(manachar模板题)
    HDU 3294 Girls' research(manachar模板题)
    HDU 4763 Theme Section(KMP灵活应用)
    Ordering Tasks UVA
    Abbott's Revenge UVA
  • 原文地址:https://www.cnblogs.com/Flyrun/p/7828772.html
Copyright © 2011-2022 走看看