认识Java类集

1、基本概念

在这里插入图片描述
1)这种框架是高性能的;
2)框架允许不同类型的集合以相同的方式和高度互操作方式工作;
3)类集必须是容易扩展和修改的;

1.1、类集框架的主要接口及特点
在这里插入图片描述
接口的继承关系:
在这里插入图片描述

2、Collection接口

在这里插入图片描述
Collection接口是单值存放的最大父接口,可以向其中保存多个单值(单个的对象)数据。
Collection接口的方法定义
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.1、Collection子接口的定义
在这里插入图片描述

3、List接口

在这里插入图片描述
在这里插入图片描述
3.1、List接口的常用子类 ArrayList
在这里插入图片描述
3.2、List接口的子类Vector
在这里插入图片描述
3.3、ArrayList与Vector的区别
在这里插入图片描述

3.4、LikedList子类与Queue接口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//LikedList:系统提供的链表类的测试与练习
@Test
public void testList() {
	//实例化String类型的对象
	LinkedList<String> link=new LinkedList<String>();
	//向链表中添加元素
	link.add("A");
	link.add("B");
	link.add("C");
	System.out.println("初始化链表"+link);
	//在链表的表头添加元素
	link.addFirst("X");
	//在链表的尾部添加元素
	link.addLast("Y");
	System.out.println("修改后的链表"+link);
	//找到表头
	System.out.println("head:"+link.element()+" link:"+link);
	//找到表头不删除表头
	System.out.println("head:"+link.peek()+" link:"+link);
	//找到并删除表头
	System.out.println("head:"+link.poll()+" link:"+link);
	
	//通过循环取出link中的全部内容(注意)
	System.out.println("size:"+link.size());
	for(int i=0;i<link.size()+1;i++) {
		System.out.print(link.poll()+"、");
		//因为每次取出一个值,size都会减小1,i需要每次归零
		i=0;
	}
	 
}

结果:
在这里插入图片描述

4、Set接口

4.1、set接口的定义
在这里插入图片描述
在这里插入图片描述
4.2、Set接口的常用子类
4.2.1、散列的存放:HashSet
在这里插入图片描述

@Test
	public void testSet() {
		//hashSet类测试与练习
		//使用接口来接收子类对象的实例(对象多态哦)
		Set<String> allSet=new HashSet<String>();
		allSet.add("A");
		allSet.add("B");
		allSet.add("C");
		//重复元素不能加入
		allSet.add("C");
		allSet.add("D");
		System.out.println("set:"+allSet);	
	}

结果:
在这里插入图片描述
4.2.2、有序的存放:TreeSet
在这里插入图片描述
在这里插入图片描述
测试与练习:

// TreeSet有序存放
	class Person implements Comparable<Person> {
		private String name;
		private int age;

		public Person(String name, int age) {
			super();
			this.name = name;
			this.age = age;
		}

		@Override
		public String toString() {
			return "Person [name=" + name + ", age=" + age + "]";
		}

		// 覆写compareTo()方法,指定排序规则
		@Override
		public int compareTo(Person per) {
			// TODO Auto-generated method stub
			if (this.age > per.age) {
				return 1;
			} else if (this.age < per.age) {
				return -1;
			} else {
				//增加字符串的比较防止 当age相同时被认为是同一个对象而被删除
				return this.name.compareTo(per.name);
			}
		}

	}

	@Test
	public void testTreeSet() {
		
	/*	 Set<String>allSet=new TreeSet<String>();
		 allSet.add("C");
		 //重复值不可插入
		 allSet.add("C");
		 allSet.add("B");
		 allSet.add("A");
		 allSet.add("E");
		 System.out.println("treeSet:"+allSet);*/
		// 清空集合中的数据
		Set<Person> perSet = new TreeSet<Person>();
		perSet.add(new Person("guai", 12));
		perSet.add(new Person("shuai", 18));
		perSet.add(new Person("cabbage", 10));
		perSet.add(new Person("guai1", 12));
		System.out.println("person:" + perSet);
	}
}

结果:
在这里插入图片描述
4.2.3、取出HashSet中重复值的探究
在这里插入图片描述

// 通过覆写Object类的hashCode()、equals、toString()3个方法来实现hashSet的取出重复值
class Person1{
	private String name;
	private int age;
	public Person1(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	//覆写equals方法
	 public boolean equals(Object obj) {
		 if (this==obj) {
			 return true;
		 }
		 //如果传递的不是本类对象返回false
		 if(!(obj instanceof Person1)) {
			 return false;
		 }
		 //向下转型在比较值是否相同
		 Person1 per=(Person1)obj;
		 if(this.name.equals(per.name)&&this.age==per.age) {
			 return true;
		 }else {
			 return false;
		 }
	 }
	 //覆写hashCode方法,指定编码公式
	 public int hashCode() {
		 return this.name.hashCode()*this.age;
	 }

	@Override
	public String toString() {
		return "Person1 [name=" + name + ", age=" + age + "]";
	}

}
@Test
public void testPerson1() {
	Set<Person1> perSet=new HashSet<Person1>();
	perSet.add(new Person1("guai", 12));
	perSet.add(new Person1("guai", 12));
	perSet.add(new Person1("guai", 13));
	perSet.add(new Person1("guai", 11));
	System.out.println(perSet);
	
}

結果:(这部分更有用的是equals和hashCode方法的覆写)
在这里插入图片描述

5、SortedSet接口

在这里插入图片描述

//5、SortedSet接口
	@Test
	public void testSortedSet() {
		//通过TreeSet实例化SortedSet
		SortedSet<String> ss=new TreeSet<String>();
		ss.add("A");
		ss.add("B");
		ss.add("C");
		ss.add("C");
		ss.add("E");
		ss.add("D");
		System.out.println(ss);
		System.out.println("第一个元素:"+ss.first());
		System.out.println("最后一个元素:"+ss.last());
		System.out.println("headSet元素:"+ss.headSet("C"));
		System.out.println("tailSet元素"+ss.tailSet("C"));
		System.out.println("subSet元素:"+ss.subSet("A", "C"));
	}

结果:
在这里插入图片描述

6、集合的输出

在这里插入图片描述
6.1、迭代输出:Iterator
1)Iterator接口简介
在这里插入图片描述
在这里插入图片描述

//6、通过Iterator接口遍历集合
	@Test
	public void testIterator() {
		List<String> strList=new ArrayList<String>();
		strList.add("hello");
		strList.add("_");
		strList.add("wo rld!");
		//实例化Iterator接口
		Iterator<String> iterator=strList.iterator();
		while(iterator.hasNext()) {
			String str=iterator.next();
			if("_".equals(str)) {
				iterator.remove();
			}
			System.out.println(str+"、");
		}
		System.out.println("remove after:"+strList);
		
	}

结果:
在这里插入图片描述

7、ListIterator:双向迭代输出

在这里插入图片描述
在这里插入图片描述
注意再遍历时会使遍历指针移动,所以必须从前到后遍历后指针再最后时才能从后先前遍历

// 7、ListIterator接口的相关操作
	// 双向迭代
	@Test
	public void testListIterator() {
		List<String> strList = new ArrayList<String>();
		strList.add("Hello");
		strList.add("_");
		strList.add("World");
		// 实例化ListIterator
		ListIterator<String> iter = strList.listIterator();
		// 增加元素 此方法添加会使遍历时的指针后移导致无法输出新加元素
		iter.add("_guai");
		System.out.println("add after:" + strList);

		System.out.println("从前到后输出:");
		while (iter.hasNext()) {
			String str = iter.next();
			System.out.print(str + "、");
			if ("World".equals(str)) {
				// 替换元素
				iter.set("shuai");
			}
			
		}
		System.out.println();
		System.out.println("set after:"+strList);

		System.out.println("从后向前输出");
		while (iter.hasPrevious()) {
			String str = iter.previous();
			System.out.print(str + "、");
		}
	}
}

结果:
在这里插入图片描述

8、使用foreach遍历

// 8、使用foreach输出
	@Test
	public void testForeach() {
		// 实例化List接口
		List<String> strList = new ArrayList<String>();

		strList.add("A");
		strList.add("B");
		strList.add("C");
		strList.add("A");
		for (String str : strList) {
			System.out.print(str + "、");
		}
	}

结果:
在这里插入图片描述

9、Enumeration接口

在这里插入图片描述

10、Map接口

在这里插入图片描述
10.1、Map.Entry接口简介
在这里插入图片描述
10.2、Map接口的常用子类在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
10.3、SortedMap接口
在这里插入图片描述
在这里插入图片描述

11、结合工具类:Collections

11.1、Collections简介
在这里插入图片描述
在这里插入图片描述
11.2、Collection操作实例

//10、Collections结合工具类操作实例
	@Test
	public void testColl() {
		//1、返回不可变的集合
		//返回不可变的空List结合
		//List<String> strList=Collections.emptyList();
	    //err:不能添加数据
		//strList.add("hello");
		
		
		//2、为集合添加内容
		List<String> strList1=new ArrayList<String>();
		//为strList1添加内容
		Collections.addAll(strList1, "guai","cabbage");
		for (int i = 0; i < strList1.size(); i++) {
			System.out.println(strList1.get(i));
		}
		//3、反转集合中的内容
		System.out.println("反转后的集合");
		Collections.reverse(strList1);
		for (int i = 0; i < strList1.size(); i++) {
			System.out.println(strList1.get(i));
		}
		//4、检索内容 检索内容存在时返回位置,不存在时返回-1
		int point=Collections.binarySearch(strList1, "guai");
		System.out.println("guai index:"+point);
		//5、替换集合中的内容
		System.out.println("替换后的集合");
		Collections.replaceAll(strList1, "guai", "shuai");
		for (int i = 0; i < strList1.size(); i++) {
			System.out.println(strList1.get(i));
		}
		
	}

結果:
在这里插入图片描述

12、其它集合类

12.1、Stack类
在这里插入图片描述
12.2、测试练习

//10、Stack类的测试与联系
	@Test
	public void testStack() {
		//实例化Stack对象
		Stack<String> stack=new Stack<String>();
		//向栈中添加元素
		stack.push("A");
		stack.push("B");
		stack.push("C");
		stack.push("D");
		stack.add("E");
		System.out.println("查找元素:"+stack.search("D"));
		
		System.out.println("出栈操作:");
		for(int i=0;i<=stack.size();i++) {
			System.out.print(stack.pop()+"、");
			i=0;
		}
	}

结果:
在这里插入图片描述

3、属性类Properties

在这里插入图片描述
在这里插入图片描述
S
测试练习:

//11、Properties类方法的测试练习
	@Test
	public void testProper() {
		//1、为Properties对象添加属性,并输出
		//实例化Properties对象
		Properties pro=new Properties();
		//添加内容
		pro.setProperty("name", "guai");
		pro.setProperty("age", "18");
		//输出内容
		System.out.println("输出属性值:");
		System.out.println("name:"+pro.getProperty("name"));
		System.out.println("age:"+pro.getProperty("age"));
		
		//2、将属性值保存再普通文件中
		
		File file=new File("E:"+File.separator+"pro.properties");
		try {
			//保存属性到普通文件中,并设置注释内容
	      pro.store(new FileOutputStream(file), "personInfo");
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		//3、从属性文件中读取属性内容
		Properties pro1=new Properties();
		try {
			//读取属性文件
			pro1.load(new FileInputStream(file));
		}catch(Exception e) {
			e.printStackTrace();
		}
		System.out.println("输出属性值:");
		System.out.print("name:"+pro1.getProperty("name")+"、");
		System.out.print("age:"+pro1.getProperty("age"));
	}

结果:
在这里插入图片描述
完结撒花

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值