java se基础--集合

集合

java se基础--集合_第1张图片

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);

         }

}


你可能感兴趣的:(java)