Java第七章集合

七、java集合

 集合体系结构

 

collection

  方法:

 

Collection coll = new ArrayList();
1.size():返回集合中元素的个数
2.add(Object obj):向集合中添加一个元素
3.addAll(Collection coll):将形参coll中包含的所有元素添加到当前集合中
4.isEmpty():判断集合是否为空
5.clear():清空集合元素
6.sysout(coll):查看几何中的元素
7.Collection coll1 = Arrays.asList(1,2,3):声明是直接加进元素
8.contains(Object obj):判断几何中是否包含指定的obj元素。如果包含,返回true,反之,返回false
判断的依据,根据元素所在的类的equals()方法进行判断
明确:如果存入集合中的元素是自定义类的对象。要求:自定义类要重写equals()方法
9.containsAll(Collection coll):判断当前集合中是否包含coll中的所有元素
10.retainAll(Collection coll1):求当前集合与coll的共有的元素,返回给当前集合
11.remove(Object obj):删除集合中的obj元素。若删除成功,返回true,否则返回false
12.removeAll(coll1):从当前集合中删除包含在coll中的元素
13.equals(Object obj):比较两个集合中的所有元素是否相同
14.hashCode():集合的hash值,堆空间放在那里
15.toArray():将集合转化为数组
16.iterator():返回一个Iterator接口实现类的对象,进而实现集合的遍历。
Iterator iterator = coll.iterator();
whille(iterator.hasNext())
sysout(iterator.next());//输出一个

 

 

 

 

collection子类:

------->List

ArrayList:List的主要实现方法
List中相对于Collection,新增加的方法
1.void add(int index,Object obj):在指定的索引位置index添加元素ele
2.boolean addAll(int index,Collection eles)
3.Object get(int index):获取指定索引的元素
4.Object remove(int index):删除指定索引位置的元素
5.Object set(int index,Object ele):设置指定索引位置的元素ele
6.List subList(int fromIndex,int toIndex):返回从formIndex到toIndex结束的一个子list集合(左闭右开:包括左边不含右边)
7.int indexOf(Object obj)返回obj在集合中首次出现的位置,没有返回-1
8.int lastIndexOf(Object obj)返回obj在集合中最后一次出现的位置,没有返回-1

List常用的方法:
增(add(Object obj))
删(remove)
改(set(int index,Object ele))
查get(int index)
插(add(int index,Object obj))
长度(size())

 

 

--------->Set子类:

--------------------->HashSet:

 

Set:存储的元素是无序的,不可重复的
1.无序性:无序性!=随机性。真正的无序性,指的是元素在底层储存的位置是无序的。
2.不可重复性:当向Set中添加进相同的元素的时候,后面的这个不能添加进去。

说明:要求添加进Set中的元素所在的类,一定要重写equals()和hashCode()方法。
进而保证Set中元素的不可重复性。

Set中的元素如何存储的呐?使用啦哈希算法。
当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,计算此对象的哈希值,
此哈希值决定了此对象在Set中存储位置。若此位置之前没有对象储存,则这个对象直接存
储到此位置。位置已有对象存储,再通过equals()比较这两个对象是否相同,如果相同,
后一个对象就不能再添加进来,万一返回false呐,都存储。(不建议如此) >要求:hashCode()方法要与equals()方法一致

 

 

 

 

---------------------->LinkedHashSet:

 

LinkHashSet:使用链表维护一个添加进集合中的顺序,导致当我们遍历LinkedHashSet集合
元素时,是按照添加进去的顺序遍历的
LinkedHashSet插入性能略低于HashSet,但在迭代访问Set里的全部元素时有很好的性能

 

 

 

 

----------------------->TreeSet

           自然排序---------自然排序接口Comparable

 

TreeSet:
1.向TreeSet中添加的元素必须是同一个类的
2.可以按照添加进集合中的元素的指定顺序遍历。像String,包装类等默认按照从小到大的顺序遍历。
3.当向TreeSet中添加自定义类的对象时,有两种排序方法:①自然排序②定制排序
4.自然顺序:要求自定义类实现java.lang.Comparable接口并重写其compareTo(Object obj)的抽象方法
在此方法中,指明按照自定义类的哪个属性进行排序
5.向TreeSet中添加元素时,首先按照compareTo()进行比较,一旦返回0,虽然仅是两个对象此属性值相同。
但是程序会认为这两个对象是相同的,进而后一个对象是不能添加进来的
>compareTo()与hashCode()以及equals()三者保持一致

public int compareTo(Object obj){
    if(o instanceof Person){
        Person p = (Person)o;
        int i = this.age.compareTo(p.age);
        if(i == 0){
            return this.name.compareTo(p.name);
        }else{
            return i;
        }
    }
    return 0;
}
1.要求添加TressSet中的元素所在的类implements Comparable接口
2.重写compareTo(object obj),在此方法内指明按照元素的哪个属性进行排序
3.向TreeSet中添加元素即可,若不实现此接口,会报运行时异常

 

            定制排序----------定制排序接口Comparator

定制排序:>compare()与hashCode()以及equals()三者保持一致
1.创建一个实现了Comarator接口的类对象
Comparator com = new Comparator(){
    向TreeSet中添加Customer类的对象,在此compare()方法中,指明是按照Customer的哪个属性排序的
    public int compare(Object o1,Object o2){
        if(o1 isntanceof Customer && o2 isntanceof Customer){
        Customer c1 = (Customer)o1;
        Customer c2 = (Customer)o2;
        int i = c1.getId().compareTo(c2.getId()) ;
        if(i==0){
            return c1.getName().compareTo(c2.getName());
        }
            return i;
        }
        return 0
    }    
};
2.将此对象作为形参传递给TreeSet的构造器中
TreeSet set = new TreeSet(com);
3.向TreeSet中添加Comparator接口中的compare方法中涉及的类的对象
set.add(new Customer("AA",1003));
set.add(new Customer("BB",1002));


1.创建一个实现Comparator接口的实现类的对象,在实现类中重写Comparator的compare(Object o1,Object o2)方法
2.在此compare()方法中指明按照元素所在类的哪个属性进行排序
3.将此实现Comparator接口的实现类的对象作为形参传递给TreeSet的构造器中
4.向TreeSet中添加元素即可。若不实现此接口,会报与运行时异常

 

 遍历集合

 

遍历集合:
1.使用迭代器iterator实现集合的遍历
Iterator iterator = coll.iterator();
whille(iterator.hasNext())
sysout(iterator.next());//输出一个

2.使用增强for循环实现集合的遍历
for(Object i : coll){
    sysout(i);
}

 

 

 

 Map

Map接口
1.Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
2.Map中的key和value都可以时任何引用类型的数据
3.Map中的key用Set来存放,不允许重复,即同一个Map对象所对应的类,须重写hashCode()和equals()方法
4.常用String类作为Map的"键"。
5.key与value之间存在单向一对一关系,即通过指定的key总能找到唯一的、确定的value

 

 

Map接口体系的继承树

 

  遍历Key-Value

 

遍历key-value对
方式一:
Set set1 = map.keySet();
for(Object obj : set1){
    sysout(obj + "--->" + map.get(obj));
}
方式二:
Set set2 = map.entrySet();
for(Object obj : set2){
    Map.Entry entry = (Map.Entry)obj;
    sysout(entry);/ sysout(entry.getKey() + "--->" + entry.getValue())
}


key是不可重复的,使用Set存放,value可以重复的,使用Collection来存放的,
一个key-value对构成一个entry(Map.Entry),entry使用Set来存放

 

 

 

 

Map分类

  HashMap:

 

一.HashMap:key是用Set来存放的,不可重复。value是用Collection来存放的,可重复
一个key-value对,是一个Entry。所有的Entry是用Set存放的,也是不可重复的。
二.向HashMap中添加元素时,会调用key所在类的equals()方法,判断两个key是否相同,若相同,则只能添加进去后添加的那个元素
1.Object put(Object key,Object value):向Map中添加一个元素,可以存null。
2.int size():返回集合的长度
3.Object remove(Object obj):按照指定的key删除此key-value
4.void putAll(Map t):放入一个Map集合
5.void clear():清空
6.Object get(Object key):获取指定key的value值,若无此key 
7.boolean containKey(Object key):是否有这个key
8.boolean containsValue(Object value)是否有这个值
9.boolean isEmpty()是否为空
10.boolean equals(Object obj)是否跟另一个Map集合相同

key 不重复 比较 :重写equals()和hashCode()方法
value 可重复 比较:重写equals()方法

 

 

 

 

  LinkedHashMap

 

LinkedHashMap:使用链表维护添加进Map中的顺序,故遍历Map时,是按添加的顺序遍历的

 

 

 

 

  TreeMap

 

按照添加进Map中的元素的key的指定属性进行排序。要求:key必须是同一个类的对象

自然排序vs自制排序

 

 

 

 

  Hashtable

 

古老的实现类,线程安全,不建议使用

Properties    常用来处理属性文件,键和值都是String类型的

 

 

 

 

Collections工具类

 

reverse(List)反转List中元素的顺序
shuffle(List):对List集合元素进行随机排序
sort(List):根据元素的自然顺序对指定List集合元素按升序排序
sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
swap(List,int ,int):将指定list集合中的i处元素进行交换

Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
Object max(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最大元素
Object min(Collection)根据元素的自然顺序,返回给定集合中的最小元素
Object min(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最小元素
int frequency(Collection,Object):返回指定集合中指定元素的出现次数
void copy(List dest,List src):将src中的内容复制到dest中
boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List的旧值对象


List list1 = Arrays.asList(new Object[list.size()]);
Collections.copy(list1,list);
sysout(list);

通过如下的方法保证list线程的安全性
List list2 = Collections.synchronizedList(list);

 

 

 

猜你喜欢

转载自www.cnblogs.com/yangHS/p/10699723.html