集合

集合

定义

集合是指由相同数据类型的一组数据构成的数据结构。

数组结构相似,但是二者也由许多不同点

**1.二者的声明方式不同 **

2.数组的长度是固定不变的,但是集合的长度是动态变化的。

3.数组只提供了有限的方法去操作数据,但是集合给了可以操作数据的许多方法。

分类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NHS3NeIw-1604995711029)(C:\Users\hu\Desktop\新建文件夹\QQ截图20201029144654.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BTSm6d6z-1604995711035)(C:\Users\hu\Desktop\新建文件夹\QQ截图20201029144709.png)]

1.List

由上图可知,List继承Collection接口。由ArraryList和vector两个实现类。这里主要介绍ArrayList集合

//声明一个ArrayList集合
List<String> list = new ArrayList<String>();//多态,泛型list为上转型对象,同时List<String>指定集合中元素数据类型只能为String类型。
//a.泛型,即在声明集合的时候,指定类集合中存放的数据类型。如果不指定,存放的是Object类型。因此这里必须使用引用类型,不能使用基础数据类型。
//b.不定义存放的数据类型,即可以存放所有类型的数据

AaaraList中提供的方法

 /*List方法
		  size:返回集合长度
		  clear:清空数据
		  isEmpty:判断集合是否为空,空返回true,非空返回false
		  get:获得元素
		  set:设置新的元素
		  remove:删除某个元素
		  contain:判断某个元素在不在集合中*/
		  

contains源码分析:
		  public boolean contains(Object o) {
        		return indexOf(o) >= 0;
    			}
    		public int indexOf(Object o) {
        		if (o == null) {
            		for (int i = 0; i < size; i++)
                		if (elementData[i]==null)
                    	return i;
        		} else {
            		for (int i = 0; i < size; i++)
                		if (o.equals(elementData[i]))
                    	return i;
        		}
        			return -1;
    			}
//如果是基本数据类型变量,调用的是包装类中的equals的方法
//如果是类类型,调用类类型中的equals方法。如果没有重写Object的equal方法,则调用的Object的equals方法

ArrayList特点

list数组是有序的,也就是说元素的存储顺序按照你的添加顺序进行存储,同时可以存储重复的数据,因为存储数据是按照输入顺序存储的,因此可以存储重复的数据,只是他们存储的位置不同,所以互相不会影响。

遍历

for(String s:names) {
			System.out.println(s);
		}
		
		
		//使用多态定义集合
		//泛型定义中只能使用Object及其子类,不能使用基础数据类型
		List<Integer> I = new ArrayList<Integer>();
		I.add(1);
		I.add(2);
		I.add(3);
		I.add(4);
		//迭代器遍历
		Iterator<Integer> iterable = I.iterator();//将集合中的元素转存到迭代器中进行遍历
		/**
		 * hasNext判断下一个集合元素是否为空,不为空返回true,为空返回false结束整个循环
		 * next,将指针向后移一位,并且将当前的数据返回
		 */
		while(iterable.hasNext()) {
			System.out.println(iterable.next());
		}

2.Set

Set集合与Map集合类似,而且在JVM中Set集合的某些方法也调用了Map集合中的方法。

声明方式

//与list声明方式一致
Set<String> set = new HashSet<String>();
/*  
    调用HashSet的构造方法,而在hashSet构造方法中,是将一HashMap对象赋值给map成员变量,由此完成hashSet的创建
		public HashSet() {
		map = new HashMap<>();
	}
*/

方法:

与List方法一致,只是实现的方式不一样
 1.add方法
    set.add("zhangsan");/*JVM源码:
		public boolean add(E e) {
			return map.put(e,PRESENT)==null;
向map集合中hashmap容器添加数据PRESENT常量。hashset存储数
据本质是将数据存放到了hashmap集合中的key值中
					}*/

遍历

Iterator<String> it = set.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
		
		for(String s:set) {
			System.out.println(s);
		}

特点

1.list可以保存重复的数据,set不能保存重复的数据
		 * 2.list集合是根据存储顺序进行保存,但Set中的hashSet不是按照保存顺序,具有很强的不确定性
		 * TreeSet按照存储顺序进行存储,LinkSet是按照自然顺序进行存储,

3.Map

与前两个集合不同的是,Map存放的是键值对,一个键(key)对应一个值(value)。但是也不能重复的存储数据,如果输入重复的键值,就会将之前的value值覆盖掉。

声明

Map<String,Integer> score = new HashMap<String,Integer>();

方法

           size:获取个数
		 * clear:清空		 * isEmpty:判断是否为空
		 * replace:替换数据
		 * put(key,value):增加元素 //增加元素时,不允许重复key值,如果重复那么以最后为主,
		 * get(key):获取key值对应的数据

遍历

/*
		 * 遍历集合
		 * 1.将集合的key值存放到一个set集合中,之后遍历key值得到value值
		 * 2.将所有的键值对放到一个entry集合中,遍历entry集合进行遍历获得key值,之后通过key值获得value值
		*/
		/*
		 * 1.通过set集合获得key值。key之后进行输出
		 */
		Set<String> keys = score.keySet();
		//增强for循环遍历
		for(String key:keys) {
			String Key = key;
			System.out.println(score.get(Key));
		}
		//迭代器
		Iterator<String> it = keys.iterator();
		while(it.hasNext()) {
			String key = it.next();
			int i = score.get(key);
			System.out.println(i);
		}
		
		/*
		 * 2.仍然使用一个Set集合进行接收,但是Set集合的类型是一个Entry<String,Integer>,也就是说将原先的HashMap的键值对放到
		 * Entry集合的键值对中。对Entry键值对进行遍历得到数据。
		 */
		Set<Entry<String, Integer>> entris = score.entrySet();
		//增强for循环
		for(Entry<String, Integer> entie:entris) {
			//得到一个每一个键值对应的key
			String key = entie.getKey();
			//通过key值获得value值
			int i = score.get(key);
			System.out.println(i);
		}
		//迭代
		/*
		 迭代器得到的是一个Entry集合,遍历返回的也是一个Entry类对象,得到该对象后,调用get值得到value值
		 */
		Iterator<Entry<String,Integer>>  it2 = entris.iterator();
		while(it2.hasNext()) {
			Entry<String,Integer> key = it2.next();
			//String Key = key.getKey();
			int value = key.getValue();
			System.out.println(value);
		}
		

tring,Integer>> it2 = entris.iterator();
while(it2.hasNext()) {
Entry<String,Integer> key = it2.next();
//String Key = key.getKey();
int value = key.getValue();
System.out.println(value);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值