黑马程序员--------------集合
来源:互联网 发布:淘宝企业店铺升级条件 编辑:程序博客网 时间:2024/06/06 14:12
Collection
|--List//元素是有序的,元素可以重复。因为该集合体系有索引。
|--Set//元素是无序的,元素不可以重复。
注意: 集合中存储的都是对象的地址。五、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 中存在指定的元素,则将其移除(可选操作)。
移除此 set 中的所有元素(可选操作)。
3.判断
boolean contains(Object o)
如果 set 包含指定的元素,则返回 true。
boolean isEmpty()
如果 set 不包含元素,则返回 true。
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:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。JDK1.0,效率低。
|--HashMap:底层是哈希表数据结构。允许使用null键null值,该集合是不同步的。JDK1.2,效率高。存入集合
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给Map集合中的键进行
排序。
常用方法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());}//}}
八、集合常用工具类
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集合
对指定的 byte 型数组按数字升序进行排序。
返回指定数组内容的字符串表示形式。
- 黑马程序员:集合类
- 黑马程序员 集合类
- 黑马程序员:集合框架
- 黑马程序员---集合
- 黑马程序员_java集合
- 黑马程序员_集合
- 黑马程序员 java 集合
- 黑马程序员-集合相关
- 黑马程序员,集合List
- 黑马程序员-List集合
- 黑马程序员_集合
- 黑马程序员-集合框架
- 黑马程序员-集合
- 黑马程序员-集合框架
- 黑马程序员-集合总结
- 黑马程序员-集合类
- 黑马程序员---集合,泛型
- 黑马程序员 集合学习
- AVAudioSession
- daemon守护进程
- Service服务<二>
- 如何获取Android设备唯一识别码
- LINUX下安装SVN
- 黑马程序员--------------集合
- 用PHP实现丢手帕问题(约瑟夫问题)
- mondrian 连接hive 步骤
- 黑马程序员——Java学习笔记 异常处理
- char varchar nvarchar区别
- 多重继承的内存分配
- 动态链接库和静态链接库
- leetcode || 143、Reorder List
- VMware Tools for OS X