博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
collection总结
阅读量:5289 次
发布时间:2019-06-14

本文共 6020 字,大约阅读时间需要 20 分钟。

一、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)

转载于:https://www.cnblogs.com/Flyrun/p/7828772.html

你可能感兴趣的文章
归并排序
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
走遍美国 —— 各州及其别名
查看>>
国内外免费电子书(数学、算法、图像、深度学习、机器学习)
查看>>
狄利克雷过程(Dirichlet Process)
查看>>
Python 字符串拼接
查看>>
HTML5 表单元素
查看>>
五子棋项目的实现(二)博弈树算法的描述
查看>>
Hibernate : Disabling contextual LOB creation as createClob() method threw error
查看>>
【bzoj4872】[Shoi2017]分手是祝愿 期望dp
查看>>
字符串元转分
查看>>
程序员网址大全(转)
查看>>
thinkphp 防sql注入
查看>>
Go语言规范1 - 统一规范篇
查看>>
s5-11 距离矢量路由选择协议
查看>>
MSSQL-SQL SERVER一些使用中的技巧
查看>>
用Vue中遇到的问题和处理方法(一)
查看>>
ASP.Net 打通服务器代码和前台界面的特殊符号
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
winform 实现类似于TrackBar的自定义滑动条,功能更全
查看>>