详述:Java集合

1、集合

1.1、集合的定义

  • 集合Java中提供的一种用来存储多个数据容器。

1.2、集合的特点

  1. 对象封装数据,集合用于储存对象。
  2. 集合是可变长度的。

1.3、集合与数据的区别

  1. 数组的长度的固定的,集合的长度是可变的。
  2. 数据可以存储基本数据类型和引用数据类型,但是集合只能储存引用数据类型。
  3. 数组存储的元素必须是同一个数据类型,集合存储的对象可以是不同的数据类型。

1.4、Collection的分类

在这里插入图片描述
Collection接口的子类口:List接口,Queue接口,Set接口。
List接口的实现类有:ArrayList、LinkedList、Stack和Vector。
Set接口的实现类有:HashSet、TreeSet和LinkedHashSet

2、List接口

  • List接口的实现类有:ArrayList、LinkedList、Stack和Vector
  • 一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多个null元素

2.1、泛型的定义

  • <>是泛型,用于限制集合中所能保存的数据类型。
  • 不同点是泛型的大小是可以自动的变长变短,而数组不可以。
    List接口常用的实现类有 ArrayList、LinkedList。
    LinkedList和ArrayList由于都是接口List的实现类,所以他们中定义的方法多半都是相同的,可能其中实现的方法不一样,但是功能都是相同的。

2.2、ArrayList添加数据获取集合元素大小方法

方法:集合名.add(e);添加元素
方法:集合名.size();

ArrayList<String> names = new ArrayList<String>();//等效于数组中元素类型String [] names = new String[];
names.add("xxxx");//向集合中添加数据
names.add("xxx");
names.add("xxxx");
int size = names.size();//获取集合元素大小
System.out.println(size);
		

2.3、LinkList添加数据获取集合元素大小方法

方法:集合名.add(e);添加元素
方法:集合名.size();

LinkedList<String> namess = new LinkedList<String>();
namess.add("xxxx");//向集合中添加数据
namess.add("xxx");
namess.add("xxxx");
int size1 = namess.size();//获取集合元素大小
System.out.println(size1);

因为ArrayList于LinkList都差不多,我们以ArrayList来讲解,会一个便可知道另一个。

2.4、ArrayList判断是否有函数方法于清空方法

方法:集合名.isEmpty();
方法:集合名.clear();

ArrayList<String> names = new ArrayList<String>();
boolean f= names.isEmpty();//用于判断集合中是否有元素,没有true,有flase
System.out.println(f);
names.clear();//用于清空集合中的元素

2.5、ArrayList的遍历方法

2.5.1、for循环遍历

	ArrayList<String> names = new ArrayList<String>();
	names.add("xxxx");
	names.add("xxx");
	names.add("xxxx");
	for(int i=0;i<names.size();i++) {
		String n = names.get(i);//get方法获取元素方法
		System.out.println(n);
	}

2.5.2、加强循环遍历

	ArrayList<String> names = new ArrayList<String>();
	names.add("xxxx");
	names.add("xxx");
	names.add("xxxx");
	for(String str:names) {
			System.out.println(str);
	}

2.5.3、迭代器遍历

	ArrayList<String> names = new ArrayList<String>();
	names.add("xxxx");
	names.add("xxx");
	Iterator<String> iterator = names.iterator();//将集合中数据做转存
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}	
	}
}
  • hasNext() -判断集合中是否有下一个元素。
  • 有的话,就下移并打印出来。

2.6、add方法于set方法

2.6.1、方法:集合名.add(index,element);

		List<String> list = new ArrayList<String>();
		list.add("xxxx");//多态
		list.add("xxx");
		list.add(1, "xxxxx");//向特定位置存储数据,原来位置的数据会顺次后移
		System.out.println(list);
  • ArrayList是List的实现类,所以这时候编译和运行就不一样了,所以其中就存在着多态。
  • 方法:集合名.add(index,element);-向特定位置存储数据,原来位置的数据会顺次后移
  • 执行结果:输出为[xxxx xxxxx xxx]。

2.6.2、方法:集合名.set(index,element);

        List<String> list = new ArrayList<String>();
		list.add("xxxx");
		list.add("xxx");
		list.set(1,"x");
		System.out.println(list);
  • 方法:集合名.set(index,element);-将指定位置的元素替换成新的元素
  • 执行结果:输出为[xxxx x]

3、Set接口

  • 一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素,只允许存入一个null元素,必须保证元素唯一性。

3.1、Set方法

  • 与List类似也拥有add方法,isEmpty方法,clear方法。但是有些方法是没有的。

3.2、Set接口于List接口的区别

3.2.1 、List集合可以保存重复的数据,但是Set不行

		Set<String> names = new HashSet<String>();	
		names.add("Jim");
		names.add("Jim");
		names.add("kake");
		int size = names.size();
		System.out.println(size);
  • 输出结果:为size的大小为2。进一步证明了Set接口不允许重复的数据。

3.2.2、List集合是按照存储的顺序储存的,Set集合不是。

  • Set中HashSet不是按照储存的顺序保存的,具有不确定性;LinkedHashSet是按照用户储存的顺序储存,TreeSet按照自然顺序储存。
		Set<String> names = new HashSet<String>();
		names.add("Jim");
		names.add("John");
		names.add("kake");
		System.out.println(names);

执行结果如下:循序是不确定的。
在这里插入图片描述

3.3、Set接口的遍历方法

  • 因为Set集合中他的顺序的不确定的,也没有get方法,所以不能用传统for循环去遍历。

3.3.1、加强循环遍历

		Set<String> names = new HashSet<String>();
		names.add("Jim");
		names.add("John");
		names.add("kake");
		for(String name: names) {
			System.out.println(name);
		}

3.3.2、迭代器遍历

		Set<String> names = new HashSet<String>();
		names.add("Jim");
		names.add("John");
		names.add("kake");
I		terator<String> iterator = names.iterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}

3.4、Set接口add方法的调用

	Set<String> names = new HashSet<String>();//调用了HashSet的构造方法
	//public HashSet(){
	// map = new HashSet();//为了map成员变量赋值,HashMap对象
	//}
	names.add("Jim");//源码
						//		public boolean add(E e) {
						//	        return map.put(e, PRESENT)==null;//向Map集合中HashMap容器中添加数据PRESENT为常量,本质:HashSet储存数据时本质时储存到HashMap集合的key
						//	    }

4、Map集合

在这里插入图片描述

  • Map 的常用实现类:HashMap、TreeMap、HashTable、LinkedHashMap、Properties。
  • Map是一个键值对集合,存储键、值和之间的映射。 Key无序,唯一;value 不要求有序,允许重复。
  • 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

4.1、Map方法

4.1.1、添加数据

方法:集合名.put();

		Map<String,Integer> socre = new HashMap<String,Integer>();
		socre.put("John", 100);//添加数据
		socre.put("kata", 60);
		socre.put("John", 60);//Map不允许重复,重复的以最后的一个为主
  • 在Map集合中,<String(key),Integer(value)>,其中String用于限定key的数据类型,Integer显示value的数据类型,泛型不能使用基本数据类型
  • 在Map集合中,是不允许重复的,如果有重复以最后一个添加数据为主

4.1.2、获取数据

		Map<String,Integer> socre = new HashMap<String,Integer>();
		int scores = socre.get("John");//获取John的value数据
		System.out.println(scores);

4.1.3、其他方法

		Map<String,Integer> socre = new HashMap<String,Integer>();
		int size = socre.size();
		System.out.println(size);
		socre.clear();//清空集合
		size = socre.size();
		System.out.println(size);
		
		boolean flag = socre.isEmpty();//判断是否为空
		System.out.println(flag);
		
		socre.put("Jim", 100);
		socre.replace("Jim", 0);//替换
		scores = socre.get("Jim");
		System.out.println(scores);

4.2、遍历方法

4.2.1、加强循环遍历

//加强循环
		for(String key : names) {
			int value = socre.get(key);
			System.out.println(value);
		}

4.2.2、迭代器遍历

//迭代器
		Iterator<String> iterator = names.iterator();
		while(iterator.hasNext()) {
			String key = iterator.next();
			int value = socre.get(key);
			System.out.println(value);
		}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值