JAVA基础——集合

集合的应用场景:

  • 存储数据的数量是动态变化的
  • 存储的数据具有一对一的关系(Map)
  • 需要对数据进行增删改查
  • 数据重复问题(Set)

为什么使用集合而不是数组?因为数组的长度是固定的,不能动态改变。而且数组遍历效率较低。

集合框架体系结构:

 

 

1. list, 能够包含有序元素的一个集合,元素之间可以重复。实现类有arraylist,list的首尾添加或者删除元素的时候,效率较高。

import java.util.ArrayList;

public class ArrayListDemo {
//在arraylist中添加课程名称,并输出
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList list = new ArrayList();
		list.add("语文");
		list.add("数学");
		list.add("英语");
		list.add("化学");
		list.add("物理");
		list.add("生物");
		System.out.println("列表中课程个数为:" + list.size());
		for (int i = 0; i < list.size();i++) {
			System.out.println("第" + (i+1) + "门课程是" + list.get(i));
		}
		
//		删除生物之后的课程为
		list.remove(list.indexOf("生物"));
		System.out.println("删除生物之后的课程为");
		for (int i = 0; i < list.size();i++) {
			System.out.println("第" + (i+1) + "门课程是" + list.get(i));
		}
	}

}

2.set,元素无序并且不能重复的结合,称为集。比较重要的实现类是HashSet。set中没有get()来取出元素,需要使用迭代器Iterator来输出元素。

2.1 .Iterator接口可以以统一的方式对各种集合元素进行遍历。两种重要的方法:hasNext()检测是否有下一个元素,Next()取出下一个元素

import java.util.HashSet;
import java.util.Iterator;

public class CatTest {

	public static void main(String[] args) {
		Cat huahua = new Cat("huahua",12,"英短");
		Cat fanfan = new Cat("fanfan",3,"中华田园猫");
		
		HashSet set = new HashSet();
		set.add(huahua);
		set.add(fanfan);
		
//		显示set中的宠物猫名称
		System.out.println("set中宠物猫有:");
		Iterator it = set.iterator();
		while(it.hasNext()) {
//			System.out.println(((Cat)it.next()).getName());
			System.out.println(it.next());
		}	

	}

}

 

         2.2 Hashset中不能添加重复的元素,HashSet通过类方法HashSet()和equals()方法来判断两个对象是否相等。

             如果Hashset中存放的不是系统类型对象,而是自定义的对象,比如说新建的类的对象,那么需要重写HashSet中的HashCode()和equals()方法来判断自定义对象是否相等。

@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + month;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		result = prime * result + ((species == null) ? 0 : species.hashCode());
		return result;
	}
/**
 * 重新equals方法:
 * 1、判断两个对象是不是同一个对象
 * 2、判断当前对象 与传入的对象是不是属于同一个类。是,则进行对象内容的比较,返回比较结果
 * 
 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (this.getClass() == Cat.class)
			return  (((Cat)obj).getMonth() == month) && 
					(((Cat)obj).getName().equals(name)) &&
					(((Cat)obj).getSpecies().equals(species));
		
		return false;
	}

3. HashMap

package com.set;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class HashmapDemo {

	public static void main(String[] args) {
		Map<String,String> footballMap = new HashMap<String,String>();
		int i = 0;
		Scanner console = null;
		while(i<3) {
			System.out.println("请输入第" + (i+1) + "支冠军队伍名称:");
			 console = new Scanner(System.in);
			String value = console.next();
			
			System.out.println("请输入第" + (i+1) + "支队伍夺冠年份:");
			console = new Scanner(System.in);
			String key = console.next();
			
//			将信息放入hashmap中
			footballMap.put(key, value);
			i++;
		}
		System.out.println("使用迭代器方式输出:");
		Iterator<String> it = footballMap.values().iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
		
		System.out.println("使用EntrySet方式输出:");
		Set<Entry<String,String>> entryset = footballMap.entrySet();
//		Iterator it2 = entryset.iterator();
//		while(it2.hasNext()) {
//			System.out.println(it2.next());
//		}
		
		for(Entry<String,String>entry:entryset) {			
			System.out.println(entry.getKey()+"-"+entry.getValue());
		}
		

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值