黑马程序员—java基础复习—集合

本文详细介绍了Java集合框架的基础知识,包括集合的概念、与数组的区别、Collection接口中的常用方法、List集合的特点与实现、Set集合的无序特性、Map集合的键值对存储、工具类Collections的功能介绍,以及如何利用这些集合进行高效的数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



------- android培训java培训、期待与您交流! ----------

第一部分、集合概述

1、概述:

       面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一 种方式。

2、集合与数组的区别:

      数组:数组的长度是固定的,虽然也可以储存对象,但是每个集合中只能存储相同类型的对象。

      集合:集合的长度是可变的,集合中只能存储对象。集合中可以存储不同类型的对象。

3、集合框架的构成及分类

     

Collection接口中常用的方法:

        add(),用于向集合中添加元素,返回boolean。                      contains(Object o),用于判断该集合中是否包含o对象。

         clear(),用去清除集合中所有的元素。                                    equals(Object  o) ,用于比较两个对象是否相等。

         isEmpty(),判断集合是否包含有元素,返回Boolean            Iterator(),获取集合的迭代器

         remove(Object o),移除集合中指定元素                                 toArray(),返回包含该集合中所有元素的数组。

         size(),获取集合的元素个数。

Map接口中常用的方法:

         clear(),用去清除集合中所有的元素。               containsKey(Object o)、containsValue(Object o),判断该集合是否包含键或值

         entrySet(),获取包含Map.Entry对象的set集合            keySet(),获取包含键的Set集合

         Values(),回去包含该Map集合所有值的集合。           put(key k,value v),向map集合中添加元素。

         get(Object key)获取该键对应的值       

4、Collection中的迭代器Iterator           

        通过Iterator可以对Collcetion集合中元素进行迭代取出如下:

   

Iterator it=Colletion.iterator();	
       while(it.hasNext()){
	      it.next();
	}
      在Iterator迭代器中,只能对集合中的元素进行取出hasNext()和移除remove()的操作。itNext()的返回值是Object,要记得类型转换。

第二部分、List集合

1、概述

        Ⅰ、List集合是有序集合,即有索引有下标,List集合中的元素可以重复。

      ⅡList集合中特有的方法:

      get(int index)通过下标获取指定位置的元素                      indexOf(Object o)返回该元素第一次在集合中出现位子的下标,没有返回-1

      lastIndexof(Object o)返回该元素最后一次出现的位子的索引       listIterator()返回列表迭代器。

      set(int index,E element)替换指定位置的元素        subList(int fromIndex,int toIndex)返回指定范围的子集,含头不含尾

      Ⅲ、ListIterator是List集合中特有的方法,是Iterator的子接口。Iterator只有取出和删除两个操作元素的方法,在迭代的时候不可以对集合进行添加和修改的操作,因为会发生ConcurrentModificationException异常。而通过ListIterator可以在迭代的时候实现对集合进行增删改查的操作。

      Ⅳ、ArrayListLinkedList中的containsremove方法中都调用的是equals方法,如果是对象的比较必须要重写Object中的equals方法。


2、ArrayList

       ArrayList底层的数据结构是数组结构,特点是数据的查询速度很快,但是增删操作稍慢,线程不同步。

3、LinkedList

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

       Ⅱ、LinkedList特有的方法:

3、Vector

      Ⅰ、Vector底层是数据结构,线程同步。

      Ⅱ、Vector的是采用枚举的形式取出集合中的数据:

	class VectorDemo{
		public static void main(String[] args){
			Vector v = new Vector();
			v.add("java01");
			v.add("java02");
			Enumeration en = v.elements();
			while(en.hasMoreElements()){
				System.out.println(en.nextElement());
			}
		}
	}

第二部分、Set集合

1、概述

       set集合是无序的,即存入和取出的顺序不一定一致,元素不可以重复

2、HashSet

       A、底层数据结构是哈希表,线程时非同步的。

       B、 HashSet是通过调用元素的hashCode和equals两个方法来保证存入数据的唯一性的。首相集合会通过每个元素的hashCode值来判断两个元素是否相等,如果相等,会继续调用equals方法来判断两个元素是否相同。

       C、对于HashSet来说,一般需要复写HashCode方法和equals方法减少hash值的重复。

3、TreeSet

       A、TreeSet可以对存入其中的元素进行自动的默认排序,底层是二叉树。

       B、TreeSet是通过compareTo方法对存入其中元素进行判断排序,和判断是否相等,从而保证存入其中元素的唯一性和有序性。

       C、TreeSet实现排序的两种方式。

        第一种方式:

                 让元素自身具备比较性,让存入TreeSet集合中的元素实现Comparable接口,并复习compareTo方法,这种方式也叫元素的自然排序或者叫做默认排序,如下:

class Student implements Comparable{
	private String name;
	private int  age;
	Student(String name,int age){
		this.name=name;
		this.age=age;
	}
	public int compareTo(Object obj){//复习compareTo方法
		Student s=(Student)obj;
		if(this.age>s.age)//按照年龄排序
			return 1;
		if(this.age==s.age)//若年龄相同则按照姓名排序
			return this.name.compareTo(s.name);
			return -1;
	}
}


          第二种方式:

                   让容器(即集合)本身具备比较性。当元素本身不具备比较性,或者具备的比较性不是所需要的时候,可以通过让容器自身具备比较性。即定义比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。当两种排序都存在时,以比较器为主。定义比较器,即定义一个类,让它实现Comparator接口,覆盖compare方法。如下:

TreeSet ts=new TreeSet(new Comp());
class Comp implements Comparator{
		public int compare(Object o1,Object o2){
			Student s1=(Student)o1;
			Student s2=(Student)o2;
			int num=s1.getName().compareTo(s2.getName());
			if(num==0)//如果姓名相等对年龄进行判断
				return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
			return num;
		}	
}

第三部分、Map集合

1、概述

       A、Map集合是向集合中存储键值对,一对一对的向集合中存储,而且要保证键值的唯一性。

       B、与Collection的区别:

               对于元素的存储,Map集合使用的是put(Key k,Value v)方法,而Collection使用的是add()方法。

                Map集合没有直接取出元素的方法,需要将其转成Set集合,然后通过迭代取出元素。

       C、Hashtable:底层是哈希表数据结构,线程同步,线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。

       D、HashMap:底层是哈希表数据结构,线程不同步,不安全,速度快,允许存放null 键,null值。

       E、TreeMap:底层是二叉树数据结构,对键进行排序,排序原理与TreeSet 相同。

2、Map集合中元素的取出

       A、通过Map.keySet(),返回一个包含Map集合键值的Set<K>,因为Set集合具备迭代性,迭代出所有的键值,然后再使用get(Key k)方法取出每个键值对应的值。

	import java.util.*;
	public class Test{
	public static void main(String args[]){
			Map<String,String> map=new HashMap<String,String>();
			map.put("1","zhangsan");
			map.put("2","lisi");
			Set<String> s=map.keySet();
			Iterator<String> it=s.iterator();
			while(it.hasNext()){
				String key=(String)it.next();
				System.out.println(key+":"+map.get(key));
			}		
	}
}

     B、通过Map.entrySet(),返回一个包含map集合映射关系的Map.Entry存入到set集合中,通过迭代取出Map.Entry(),再通过Map.Entry()的getKey()和getValue()取出Map集合的值。

	import java.util.*;
	public class Test{
	public static void main(String args[]){
		Map<String,String> map=new HashMap<String,String>();
		map.put("1","zhangsan");
		map.put("2","lisi");
		Set<Map.Entry<String,String>> s=map.entrySet();
		Iterator<Map.Entry<String,String>> it=s.iterator();
		while(it.hasNext()){
			Map.Entry<String,String> entry=(Map.Entry<String,String>)it.next();
			System.out.println(entry.getKey()+":"+entry.getValue());
		}		
	}
}

3、Map.Entry的原理

       Entry,其实也是一个接口,它是Map接口中的一个内部接口,其子类在实现Map接口的时候复写了Map内部的Entry接口。

第四部分、工具类Collections

1、概述

      Collections工具类,属于java.util包,其中的方法全是静态方法,可以直接调用。

2、Sort排序

              static <T extends Comparable<? super T>> void sort(List<T> list)

       根据元素的自然排序,对指定的列表升序进行排序,传入的list对象必须是Comparable的子类,即list中存储的对象必须要有比较性(实现Comparable接口)。

static <T>  void sort(List<T> list,Comparator<? super T> c)

        可以自定义比较器,并将比较器传入sort中,类似于TreeSet。

3、取最大值

                      Collections.max(list),Collections.max(list,Comparator)

        取出list集合中元素的自然排序最大值,传入的list集合中存储的对象需实现Comparable接口,或者传入一个比较器。

4、二分查找

                      Collection.binarySearch(list,"aa");

      传入的list集合必须是进行了排序的,通过二分法搜索指定的对象,返回对象的小标

5、反序

                            reverse(List list)

          反转指定列表中元素的顺序。

                         static  <T>      Comparator<T>        reverseOrder()

          返回一个比较器,强行逆转实现了Comparable接口的对象collection的自然顺序。

                           static  <T>     Comparator<T>   reverseOrder(Comparator<T>  cmp)

          返回一个比较器,它强行逆转指定比较器的顺序。

6、转换为同步

                           static  <T>  List<T>  synchronizedList(List<T> list)

                           static  <K,V>  Map<K,V><T>  synchronizedMap(Map<K,V> m)

                           static  <T>  Set<T>  synchronizedSet(Set<T> s)

             返回与之对应的同步的集合





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值