黑马程序员--------------集合

来源:互联网 发布:淘宝企业店铺升级条件 编辑:程序博客网 时间:2024/06/06 14:12
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、集合关系图
                                       
二、什么是集合?
用来存储对象的容器。
三、集合和数组的区别
数组的长度固定,可以存储基本数据类型。集合的长度可以变化,只能存储对象。
 四、Collection      
 由图  List和Set是 collection的子接口。

Collection

                     |--List//元素是有序的,元素可以重复。因为该集合体系有索引。

                     |--Set//元素是无序的,元素不可以重复。

      注意: 集合中存储的都是对象的地址。
Collection集合中的常用方法。
1.添加
boolean add(E e)确保此 collection 包含指定的元素(可选操作)。
2.删除
void clear()移除此 collection 中的所有元素(可选操作)。
boolean remove(Object o)从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 boolean removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 
3.长度
int size()返回此 collection 中的元素数。
4.判断
boolean equals(Object o) 比较此 collection 与指定对象是否相等。
boolean contains(Object o)如果此 collection 包含指定的元素,则返回 true。
5.转换
Object[] toArray()返回包含此 collection 中所有元素的数组。

五、List

组成

        List:元素是有序的,元素可以重复。因为该集合体系有索引。

            |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。

            |--LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢。

            |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。

凡是可以操作角标的方法都是该体系特有的方法。1、增booleanadd(index,element);//指定位置添加元素BooleanaddAll(index,Collection);//在指定位置增加给定集合中的所有元素,若省略位置参数,则在当前集合的后面依次添加元素2、删Booleanremove(index);//删除指定位置的元素3、改set(index,element);//修改指定位置的元素。4、查get(index);//通过角标获取元素subList(from,to);//获取部分对象元素5、其他listIterator();//List特有的迭代器indexOf(obj);//获取元素第一次出现的位置,如果没有则返回-1注:List集合判断元素是否相同,移除等操作,依据的是元素的equals方法。

代码:
package cn.itheima;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/* ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。 */public class ArraryListDemo {public static void main(String[] args) throws Exception {//创建数组对象List<Integer> list = new ArrayList<Integer>();list.add(123);list.add(8);list.add(10);String str ="abc";/*  java.lang.NumberFormatExceptionString str ="abc";int str_int = Integer.parseInt(str);list.add(str_int);System.out.println(list);*///方法二:可行Class clazz =list.getClass();System.out.println(clazz);Method m = clazz.getMethod("add", Object.class);m.invoke(list,str);m.invoke(list, new Test());System.out.println(list);//方法一遍历:for(int i=0;i<list.size();i++){//int aa = list.indexOf(10);System.out.println(list.get(i));}//Iterable it =list.iterator();//方法二迭代遍历Iterator it = list.iterator();while(it.hasNext()){Object obj =it.next();System.out.println(obj);}}}

六、Set

Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。     

           |--HashSet:底层数据结构是哈希表。线程不同步。 保证元素唯一性的原理:判断元素的hashCode值是否相同。如果相同,还会继续判断元素的equals方法,是否为true

|--LinkedHashSet :inkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。

           |--TreeSet:可以对Set集合中的元素进行排序。默认按照字母的自然排序。底层数据结构是二叉树。保证元素唯一性的依据:compareTo方法return 0

方法摘要 

1.增
boolean add(E e)
如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。
2.删

boolean remove(Object o)
如果 set 中存在指定的元素,则将其移除(可选操作)。

void clear()
移除此 set 中的所有元素(可选操作)。 

3.判断
boolean contains(Object o)
如果 set 包含指定的元素,则返回 true。 

boolean isEmpty()
如果 set 不包含元素,则返回 true。

4.用与判断是否同一个元素
boolean equals(Object o)
比较指定对象与此 set 的相等性。
int hashCode()
返回 set 的哈希码值。 

5.其他常用
Iterator<E> iterator()
返回在此 set 中的元素上进行迭代的迭代器。
int size()
返回 set 中的元素数(其容量)。
Object[] toArray()
返回一个包含 set 中所有元素的数组。

代码:

package cn.itheima;import java.util.TreeSet;class Err implements Comparable<Object>{static int i;public int compareTo(Object o) {// TODO Auto-generated method stubi++;return i;}}public class TreeSetDemo {public static void main(String[] args) {Demo();}/** * 向Set集合中添加元素。 */public static void Demo() {TreeSet tr = new TreeSet();//tr.add(3);tr.add(new Err());//Err类必须实现Comparable接口tr.add(new Err());System.out.println(tr.size());//tr.add("a");//tr.add(new Integer(34));}}

七、Map

Map  用来存放键 值对的集合,键必须唯一,值可以不同。

            |--Hashtable:底层是哈希表数据结构,不可以存入nullnull值。该集合是线程同步的。JDK1.0,效率低。

            |--HashMap:底层是哈希表数据结构。允许使用nullnull值,该集合是不同步的。JDK1.2,效率高。存入集合

            |--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给Map集合中的键进行

排序。

常用方法

1、添加
Vput(K key,V value);//添加元素,如果出现添加时,相同的键,那么后添加的值会覆盖原有键对应值,并put方法会返回被覆盖的值。
voidputAll(Map <? extends K,? extends V> m);//添加一个集合
2、删除
clear();//清空
Vremove(Object key);//删除指定键值对
3、判断
containsKey(Objectkey);//判断键是否存在
containsValue(Objectvalue)//判断值是否存在
isEmpty();//判断是否为空
4、获取
Vget(Object key);//通过键获取对应的值
size();//获取集合的长度
Collection<V>value();//获取Map集合中所以得值,返回一个Collection集合。

代码:

package cn.itheima;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.Map.Entry;public class HasMapDemo {public static void main(String[] args) {//创建映射类Map<Integer,String> map = new HashMap<Integer,String>();map.put(7, "离阿");map.put(5, "李li");map.put(2, "李琦");//方式一: map.keySet();  SetSet<Integer> list = map.keySet();for(Integer in : list ) {System.out.println(in);System.out.println(map.get(in));}//方式二:通过迭代方法遍历map集合Set<Entry<Integer, String>> key = map.entrySet();Iterator<Entry<Integer, String>> it = key.iterator();while(it.hasNext()) {Map.Entry<Integer, String> me = it.next();System.out.println(me.getKey()+"="+me.getValue());}//}}

八、集合常用工具类
Collections和Arrays方法都是静态的,不用创建对象,类名直接使用。
1、Collections :用于操作集合。
常用方法:
1、查找
Tmax(Collection<? extends T> coll);//根据集合的自然顺序,获取coll集合中的最大元素
Tmax(Collection<? extends T> coll,Comparator<? super T> comp);//根据指定比较器comp的顺序,获取coll集合中的最大元素
intbinarySearch(Lsit<? extends Comparable<? super T>> list,Tkey);//二分法搜索list集合中的指定对象
2、替换
voidfill(List<? super T> list, T obj);//将list集合中的全部元素替换成指定对象obj
booleanreplaceAll(List<T> lsit,T oldVal,T newVal);//用newVal替换集合中的oldVal值
void swap(Listlist,int i,int j);/在指定列表的指定位置处交换元素
3排序:
void shuffle(List<?> list);//使用默认随机源对list集合中的元素进行随机排序
void sort(Lsit<T> list);//根据自然顺序对list集合中的元素进行排序
voidsort(List<T> lsit,Comparator<? super T> c);//根据指定比较器c的排序方式对list集合进行排序
4、反转
reverse(List<?> list);//反转list集合中元素的顺序
Comparator reverseOrder();//返回一个比较器,强行逆转了实现Comparable接口的对象的自然顺序
ComparatorreverseOrder(Comparator<T> cmp);//返回一个比较器,强行逆转了指定比较器的顺序
5、同步的集合
List<T>synchronizedList(List<T> list);//返回支持的同步(线程安全的)List集合
Map<K,V>synchronizedList(Map<K,V> m);//返回支持的同步(线程安全的)Map集合

Collection和Collections的区别?
Collection是一个接口,里面定义了单列集合的共性方法。Collections是一个集合框架的工具类。里面都是静态操作List集合的方法。 通常常用的集合都是线程不安全的。因为要提高效率。如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
2.、Arrays :用于操作数组。
常用方法:
1Lsit<T> asList(T... a);//将数组转换为集合。
2.对集合排序
static void sort(byte[] a)
对指定的 byte 型数组按数字升序进行排序。
3   static String toString(boolean[] a)
     返回指定数组内容的字符串表示形式。













0 0
原创粉丝点击