集合框架

集合框架

集合框架
首先要知道为什么学集合框架?
数组有什么缺点?
1.数组中元素类型必须保持一致
2.后期不能更改数组长度,在定义数组时已经定好长度
集合框架的好处:
1.集合框架中可以存储任意对象类型
2.集合框架中的元素可以随意增删

集合框架的继承关系:
1.集合框架的最顶层接口有两个:Conllection接口和map接口
2.Collection接口下有子接口:Set接口,Queue接口,List接口
a.Set接口的实现类有:HashSet类(重点) TreeSet类 LinkedHashSet类等
b.Queue接口的实现类:LinkedList类等
c.List接口的实现类:ArrayList类(重点) LinkedList类 Vector类
Stack类等
三种接口的特点:
Set接口:表示容器中元素不重复,无序无下标,取值高效.系统用的比较多
List接口:表示容器中元素可以重复,有序有下标就是正常数组
Queue接口:JDK1.5新增,与上面两个接口相比主要区分在于Queue容器关键在于存储数据,而不是处理数据(比如增删,遍历等)
3.Map接口的实现类:HashMap类(重点) HashTable类 LinkedHashMap类TreeMap类等
Map接口:容器中元素的存储形态是键值对,无序,没有下标.key–value
在开发中使用最多的是:ArrayList类HashSet类HashMap类

list接口
		//list接口
		//1.多态方式创建对象 import java.util.List;
		List<String> list1=new ArrayList<>();
		//初始容量 可不写
		//2.添加元素
		list1.add("呵呵");
		list1.add("哈哈");
		list1.add("嘻嘻");
		//在指定位置添加元素
		list1.add(1, "嘿嘿");
		list1.add("嘻嘻");
		//添加多个元素 add
		List<String> list2=new ArrayList<>();
		list2.add("李易峰");
		list2.add("杨洋");
		list2.add("言承旭");
		//将list2整体添加到list1中
		list1.addAll(0,list2);
		System.out.println(list1);
		//3.判断容器中是否包含某个/某些元素   contains
		System.out.println(list2.contains("李易峰"));//一个
		System.out.println(list1.containsAll(list2));//多个
		//4.通过下标 获取元素 get
		System.out.println(list2.get(1));
		//5.通过元素 获取下标 indexOf
		//a.从前往后查找 indexOf()
		int index=list1.indexOf("嘿嘿");
		System.out.println(index);
		//b.从后往前找
		index=list1.lastIndexOf("嘻嘻");
		System.out.println(index);
		//6.通过下标修改元素 set
		list1.set(1, "小泽");
		System.out.println(list1);
		//7.获取多个子元素 subList
		List<String> childElement=list1.subList(0, 3);
		System.out.println(childElement);
		//8.删除元素
		//a.按照下标删除
		list1.remove(1);
		//b.直接删除对象
		list1.remove("嘻嘻");//如果对象重复 只删除第一次出现的对象
//		list1.removeAll(list2);
		System.out.println(list1);
		//9.遍历容器
		//size()  数组容器中的元素个数
		//a. 普通方式 以后尽量不要用啦!
		for(int i=0;i<list1.size();i++) {
			System.out.print(list1.get(i)+" ");
		}
		System.out.println("--------------");
		//b. 对象级别的遍历 以后尽量用这个啦!
		for (String string : list1) {
			System.out.print(string+" ");
		}
  1. 在集合中添加数据的方法是add()
  2. 查看容器中是否含有某个/某些元素方法是contains()
  3. 通过下标 获取元素 get()
  4. 通过元素 获取下标 indexOf()
  5. 通过下标修改元素 set()
  6. 获取多个子元素 subList()
    参数1:开始的下标
    参数2:结束的下标
  7. 删除元素 remove()
ArrayList类 ,是List接口的实现类的新方法特征!!!
ArrayList<String> arrayList=new ArrayList<>();
		arrayList.add("妹子");
		arrayList.add("汉子");
		arrayList.add("女汉子");
		System.out.println(arrayList);
		//1.克隆 clone
		ArrayList<String> arrayCopy= (ArrayList<String>) arrayList.clone();
		System.out.println(arrayCopy);
		//如果以下写法呢???
		ArrayList<String> array1=arrayList;//相同的内存空间
		array1.set(0, "软妹子");//修改元素
		System.out.println(array1);
		System.out.println(arrayList);//改变
		System.out.println(arrayCopy);//不改变
		//2.手动增加容器容量(了解)
		arrayList.ensureCapacity(10);
		//3.释放内存优化内存 当确定不在操作时才会释放内存空间(了解)		
		arrayList.trimToSize();

Java中谁能开辟新空间只有new和克隆
克隆跟new一样都是开辟一个新内存空间,好比克隆羊多莉是另外一个个体本体在怎么变,克隆体都不变

Set接口
		//1.创建对象
		Set<String> set1=new HashSet<>();
		//2.添加元素
		set1.add("喜之螂");
		set1.add("托儿索");
		set1.add("娃娃鱼");
		set1.add("提款姬");
		set1.add("托儿索");//去除重复
		//3.删除元素
		set1.remove("娃娃鱼");
		System.out.println(set1);
		//4.查询是否包含某个元素
		System.out.println(set1.contains("托儿索"));
		//5.遍历数组
		for (String string : set1) {
			System.out.println(string);
		}
Map接口,存储形态是键值对 元素成对存在!无序没有下标!
//1.创建对象
		Map<String, String> map=new HashMap<>();
		//2.添加元素 put()
		map.put("Q", "天音波/回音波	");
		map.put("W", "金钟罩/铁布衫");
		map.put("E", "天雷破/摧筋断骨");
		map.put("R", "猛龙摆尾");
		//?键值对可以重复吗
		//在map中值可以重复
		//在map中,重复添加键,相当于修改操作
		map.put("R", "火箭");
		map.put("D", "金钟罩/铁布衫");
		System.out.println(map);
		//3.put() 也可以修改元素
		//4.通过键获取值
		String value=map.get("R");
		System.out.println(value);
		//5.获取所有的键
		Set<String> allKeys=map.keySet();
		System.out.println(allKeys);
		//6.获取所有值
		Collection<String> allValues= map.values();
		System.out.println(allValues);
		for (String string : allValues) {
			System.out.println(string);
		}
		//7.按照键 删除值
		map.remove("D");
		System.out.println(map);
		//8.替换(极少用) 本质还是Put
		map.replace("Q", "一技能");
		//9.判断某个键key 是否存在
		System.out.println(map.containsKey("F"));
		//10.判断某个值value 是否存在
		System.out.println(map.containsValue("哈哈"));
		//11.遍历
		for (String string : allValues) {
			System.out.println(string);
		}
		//或者
		for (String string : allKeys) {
			System.out.print(string);
		}
		//12.容器通用方法 清空容器
//		map.clear();
		System.out.println(map);
		
		System.out.println("====================");
		//---------------------------
		//迭代器----功能就是为了遍历容器
		//优势: 集合框架中任何容器都能使用!
		Iterator<String> it=allValues.iterator();
		while(it.hasNext()) {
			String str=it.next();
			System.out.println(str+"#");
		}
		Iterator<String> it2=allKeys.iterator();
		while (it2.hasNext()) {
			String string =it2.next();
			System.out.println(string+"*");
		}

1.如果我们需要保留存储顺序,并且保留重复元素,使用List
2.如果查询较多,使用ArrayList
3.如果存取较多使用LinkedList
4.如果需要使用多线程安全访问,使用Vector
5.如果我们不需要保留顺序并且不需要重复元素,使用Set
6.如果需要元素排序,使用TreeSet
7.如果不需要排序使用HashSet,因此其效率高于TreeSet
8.如果我们既需要保存存储顺序,又不想元素重复那么使用LinkedHashSet

学了集合框架实用

用集合接收各种数据如:
创建一个girl类

	private String name;
	private int age;
	private String phone;
	private String adress;
	public Girl() {
		
	}
	public Girl(String name, int age, String phone, String adress) {
		super();
		this.name = name;
		this.age = age;
		this.phone = phone;
		this.adress = adress;
	}
	public String getName() {
		return name;
		
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getAdress() {
		return adress;
	}
	public void setAdress(String adress) {
		this.adress = adress;
	}
	@Override
	public String toString() {
		return "Girl [name=" + name + ", age=" + age + ", phone=" + phone + ", adress=" + adress + "]";
	}

创建一个测试类:

		Girl girl=new Girl("丽丽",20,"111","郑州");
		Girl girl2=new Girl("梅梅",21,"000","杭州");
		Girl girl3=new Girl("花花", 31,"777","广州");
		Girl girl4=new Girl("依依", 18,"444","兰州");
		ArrayList<Girl> girlsArray=new ArrayList<>();
		
		girlsArray.add(girl);
		girlsArray.add(girl2);
		girlsArray.add(girl3);
		girlsArray.add(girl4);
		Collections.sort(girlsArray, new Girl());
		for (Girl girl5 : girlsArray) {
			System.out.println(girl5);
		}

练习一:

图书管理系统:
1.定义图书类
属性:编号 书名 作者 价格 书籍类型(如 玄幻 文学等)
2.定义图书管理类
方法:
a.添加书籍
b.按照书名查询书籍
c.卖书,通过卖书修改书籍数量(主要不要负数)
d.通过编号,删除书籍
e.通过书籍类型,查询所有书籍
自己做做试试不会点着里

练习二
联系人管理:
1.联系人类:姓名 电话 地址
2.联系人管理类:

  • a.通过首字母给联系人分组添加到通讯录中!
  • b.通过电话查询联系人
  • c.通过姓名删除联系人(注意,如果当前分组只剩下最后一个人需要将分组也删除)
  • d.查看有几个分组,以及一共几个联系人
  • e.通过姓名,修改联系人的电话
    自己做做试试不会点着里
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值