java se基础--集合
集合
1.对象的存储 :
1)数组(基本数据类型 & 引用数据类型) 2)集合(引用数据类型)
>数组存储数据的弊端:长度一旦初始化以后,就不可变;真正给数组元素赋值的个数没有现成的方法可用.
2.集合框架
Collection接口:方法:1)add(Objectojb),addAll(Collection coll),size(),clear(),isEmpty();
2)remove(Object obj),removerAll(Collectioncoll),retainAll(Collection coll),
equals(Objectobj),contains(Object obj),containsAll(Collection coll),hashCode()
3)iterator(),toArray();
|------List接口:存储有序的,可以重复的元素,新增的方法:删除remove(intindex) 修改set(intindex,Object obj) 获取get(int index) 插入add(int index,Object obj)
添加进List集合中的元素(或对象)所在的类一定要重写equals()方法
|-------ArrayList(主要的实现类)、
|-------LinkedList(更适用于对于频繁的插入、删除操作)
|-------Vector(古老的实现类、线程安全的,但效率低于ArrayList)
|------Set接口:存储无序的,不可重复的元素.---相当于高中的"集合"概念
>Set使用的方法基本上都是Collection接口下定义的
>添加进Set集合中的元素所在的类一定要重写equals()和hashCode().要求重写equals()和hashCode()方法保持一致.
>1.无序性:无序性!=随机性.真正的无序性,指的是元素在底层存储的位置是无序的
>2.不可重复性:当向Set中添加进相同对的元素的时候,后面的这个不能添加进去
|-------HashSet(主要的实现类)
|-------LinkedHashSet(是HashSet的子类,当我们遍历集合元素时,是按照添加进去的顺序实现的;频繁的遍历,较少的添加、插入操作建议选择)
|-------TreeSet(可以按照添加进集合中的元素的指定属性进行排序)
>要求TreeSet添加进元素必须是同一个类的!
>两种排序方式:自然排序:
1.要求添加进TreeSet中的元素所在的类implementsComparable接口
2.重写compareTo(Objectobj),在此方法内指明按照元素的哪个属性进行排序
3.向TreeSet中添加元素即可.若不实现此接口,会报运行时异常
定制排序:1.创建一个实现Comparator接口的实现类的对象.在实现类的对象.在实现类中的重写Comparator的compare(Objecto1,Object o2)方法
2.在此compare()方法中指明按照元素所在类的哪个属性进行排序
3.将此实现Comparator接口的实现类的对象作为形参传递给TreeSet的构造器中
4.向TreeSet中添加元素即可.若不实现此接口, 会报运行时异常
>要求重写的compareTo()或者compare()方法与equals()和hashCode()方法保持一致
Map接口:存储"键-值"对的数据 ------相当于高中的"函数y=f(x)"
>key是不可重复的,使用Set存放,value可以重复的,使用Collection来存放的.一个key-value对构成一个entry(Map.Entry),entry使用set来存放
>添加、修改put(Objectkey,Object value) 删除remove(Objectkey) 获取get(Objectkey)
size()/keySet() values() entrySet()
|-----HashMap:主要的实现类
|-----LinkedHashMap:是HashMap的子类,可以按照添加进Map的顺序实现 遍历
|-----TreeMap:需要按照key所在类的指定属性进行排序.要求key是同一个 类的对象.对key考虑使用自然排序或定制排序
|-----Hashtable:是一个古老的实现类,线程安全的,不可以添加null键,null 值的,不建议使用
|-----子类:Properties:常用来处理属性文件
Iterator接口:用来遍历Collection元素
Collections工具类:用来遍历Collection及Map的工具类,大部分为static的方法
Map的遍历:
/*
* 如何遍历Map Set keySet()Collection values() Set entrySet()
*/
@Test
publicvoid test2() {
Mapmap = new HashMap();
map.put("AA",213);
map.put("BB",45);
map.put(123,"CC");
map.put(null,null);
map.put(newPerson("DD", 23), 89);
//1.遍历key集。
Setset = map.keySet();
for(Object obj : set) {
System.out.println(obj);
}
//2.遍历value集
Collectionvalues = map.values();
Iteratori = values.iterator();
while(i.hasNext()) {
System.out.println(i.next());
}
//3.如何遍历key-value对。
//方式一:
Setset1 = map.keySet();
for(Object obj : set1) {
System.out.println(obj+ "----->" + map.get(obj));
}
//方式二:
Setset2 = map.entrySet();
for(Object obj : set2) {
Map.Entryentry = (Map.Entry) obj;
//System.out.println(entry.getKey() + "---->" + entry.getValue());
System.out.println(entry);
}
}
Collections工具类的使用:
/*
* 操作Collection以及Map的工具类:Collections
*
* 面试题:区分Collection与Collections
*
*/
public class TestCollections {
/*
* Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
Objectmax(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素
Objectmin(Collection)
Objectmin(Collection,Comparator)
intfrequency(Collection,Object):返回指定集合中指定元素的出现次数
voidcopy(List dest,List src):将src中的内容复制到dest中
booleanreplaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值
*/
@Test
publicvoid testCollections2(){
Listlist = new ArrayList();
list.add(123);
list.add(456);
list.add(12);
list.add(78);
list.add(456);
Objectobj = Collections.max(list);
System.out.println(obj);
intcount = Collections.frequency(list, 4567);
System.out.println(count);
//实现List的复制
//Listlist1 = new ArrayList();//错误的实现方式
Listlist1 = Arrays.asList(new Object[list.size()]);
Collections.copy(list1,list);
System.out.println(list1);
//通过如下的方法保证list的线程安全性。
Listlist2 = Collections.synchronizedList(list);
System.out.println(list2);
}
/*
* reverse(List):反转 List 中元素的顺序
shuffle(List):对 List 集合元素进行随机排序
sort(List):根据元素的自然顺序对指定List 集合元素按升序排序
sort(List,Comparator):根据指定的Comparator 产生的顺序对 List 集合元素进行排序
swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换
*/
@Test
publicvoid testCollections1(){
Listlist = new ArrayList();
list.add(123);
list.add(456);
list.add(12);
list.add(78);
System.out.println(list);
Collections.reverse(list);
System.out.println(list);
Collections.shuffle(list);
System.out.println(list);
Collections.sort(list);
System.out.println(list);
Collections.swap(list,0, 2);
System.out.println(list);
}
}