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)

  • 相关阅读:
    git add --all
    docker进入数据库
    类里面函数调用
    http状态码
    在 python 中,for … else
    类怎么传参数 初始化函数
    Jmeter安装配置环境---小白看图安装
    冒泡排序
    Fiddler抓包【7】_次要功能和第三方插件
    Fiddler抓包【6】_Fiddler Script
  • 原文地址:https://www.cnblogs.com/Flyrun/p/7828772.html
Copyright © 2011-2022 走看看