JAVA 연습-수집 연습 (HashSet, TreeSet)은 반복 할 수없는 난수 생성, 중복 요소 제거, 집합에서 중복 요소 제거, 역순으로 문자열 출력, 역순으로 정수 출력, 역순으로 개체 정렬

1-20 사이의 난수 10 개 생성, 난수는 반복 할 수 없음

분석:

  1. Random 클래스로 난수 객체 만들기
  2. 10 개의 난수를 저장해야하며 반복 할 수 없으며 HashSet 컬렉션을 사용할 수 있습니다.
  3. HashSet의 크기가 10 미만이면 연속 저장 가능, 10 이상이면 저장 중지
  4. Random 클래스의 nextInt (n) 메서드를 통해 1에서 20 사이의 난수를 가져 와서 HashSet 컬렉션에 저장합니다.
  5. Traverse HashSet
public class Test1 {
    
    

	public static void main(String[] args) {
    
    
		Random random =new Random();
		
		HashSet<Integer> hs =new HashSet<Integer>();
		while (hs.size()<10) {
    
    
	//通过Random类中的nextInt(n)方法获取1到20之间的随机数,并将这些随机数存储到HashSet集合中
			hs.add(random.nextInt(20)+1);
		}
		for (Integer integer : hs) {
    
    
			System.out.println(integer);
		}
	}
 
}

키보드에서 한 줄의 입력을 읽고, 반복되는 문자를 제거하고, 다른 문자를 인쇄합니다.

분석:

  1. 스캐너 개체 만들기
  2. HashSet 객체 생성, 문자 저장 및 중복 제거
  3. 문자열을 문자 배열로 변환하고, HashSet 컬렉션의 각 문자를 가져오고, 중복 항목을 자동으로 제거합니다.
  4. HashSet을 탐색하고 각 문자를 인쇄합니다.
    팁 : 개체는 컬렉션에 저장되지만 요소는 배열에 저장됩니다.
public class Test2 {
    
    

	public static void main(String[] args) {
    
    
		System.out.println("请输入一段字符串");
		Scanner scanner =new Scanner(System.in);
		
		HashSet<Character>hs =new HashSet<Character>();
		//将字符串转换为字符数组,获取每一个字符存储在HashSet集合中,自动去除重复
		String line =scanner.nextLine();
		char[] arr =line.toCharArray();
		//遍历数组
		for (char c : arr) {
    
    
			hs.add(c);
		}
		//遍历HashSet, 打印字符
		for (Character ch : hs) {
    
    
			System.out.print(ch);
		}
	}

}

컬렉션에서 중복 요소 제거

분석:

  1. 여러 반복 요소를 저장하는 List 컬렉션 만들기
  2. 중복 제거 방법을 별도로 정의하십시오
    (
  • LinkedHashSet 컬렉션 만들기
  • LinkedHashset 컬렉션에 List 컬렉션의 모든 요소를 ​​추가합니다.
  • List 컬렉션에서 요소 제거
  • LinkedHashSet 컬렉션의 요소를 List 컬렉션에 추가합니다.
  1. 목록 모음 인쇄
public class Test3 {
    
    
	public static void main(String[] args) {
    
    
		List<String> list =new ArrayList<String>();
		list.add("a");
		list.add("a");
		list.add("a");
		list.add("b");
		list.add("b");
		list.add("b");
		list.add("c");
		list.add("c");
		list.add("c");	
		 getSingle(list);
		 System.out.println(list);			 
	}
	/*
	 *    方法分析:
	 * 创建一个LinkedHashSet集合
	 * 将List集合中所有的元素添加到LinkedHashset集合
	 * 将List集合中的元素去除
	 * 将LinkedHashSet集合中的元素添加到List集合中
	 */
	public  static void getSingle(List<String> list) {
    
    
			LinkedHashSet<String> lhs =new LinkedHashSet<String>();
			//将List集合中所有的元素添加到LinkedHashSet集合
			lhs.addAll(list);
			//list集合全部删除
			list.clear();
			
			list.addAll(lhs);
	}
}

순서가 지정되지 않고 반복되는 문자열을 컬렉션에 저장하고, 순서를 지정하는 방법 (사전 순서)을 정의하고, 중복을 제거 할 수 없습니다.

분석:

  1. 목록 컬렉션을 정의하고 순서가 지정되지 않은 반복되는 문자열 저장
  2. 정의 방법은 순서대로 중복을 유지합니다.
  3. 목록 모음 인쇄
public class Test4 {
    
    
public static void main(String[] args) {
    
    
	List<String> list=new ArrayList<String>();
	list.add("aaa");
	list.add("fff");
	list.add("bbb");
	list.add("fff");
	list.add("bbb");
	list.add("aaa");
	list.add("aaa");
	list.add("eee");
	list.add("ddd");
	list.add("ddd");
	
	sort(list);
	
	System.out.println(list);
}
/*
 *创建TreeSet集合对象,因为String本身具有比较功能,但是重复不会保留,所有使用比较器
 * 将List集合中所有的元素添加到TreeSet集合中,对齐排序,保留重复
 * 清空list集合
 * 将TreeSet集合中排好序的元素添加到list集合中
 */
public  static void sort(List<String> list) {
    
    
	//匿名内部类,实现Comparator的接口,整个花括号代表它的子类对象
	TreeSet<String> ts =new TreeSet<String>(new Comparator<String>() {
    
    

		@Override
		public int compare(String s1, String s2) {
    
    
			int num =s1.compareTo(s2);		//比较内容为主要条件按
			return num==0? 1 :num;
		}
	});
	//将List集合中所有的元素添加到TreeSet集合中,对齐排序,保留重复
	ts.addAll(list);
	list.clear();
	list.addAll(ts);
}	
}

키보드에서 문자열을 받으면 프로그램은 키보드 입력과 같은 모든 문자를 정렬합니다. hellomotherfucker program print : ceeefhhkllmoorrtu

분석:

  1. 키보드 입력 문자열, 스캐너
  2. 문자열을 문자형 배열로 변환
  3. TreeSet 컬렉션을 정의하고 비교기를 전달하여 문자를 정렬하고 중복을 유지합니다.
  4. 문자 배열을 탐색하고 각 문자를 TreeSet 컬렉션에 저장합니다.
  5. TreeSet 컬렉션을 탐색하고 각 문자를 인쇄합니다.
public class Test5 {
    
    
	public static void main(String[] args) {
    
    
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入一个字符串");
		String line =scanner.nextLine();
		//将字符串转换为字符数组
		char []arr=line.toCharArray();
		//定义TreeSet集合,传入比较器对字符排序
		TreeSet<Character> ts=new TreeSet<Character>(new Comparator<Character>() {
    
    

			@Override
			public int compare(Character c1, Character c2) {
    
    
				int num =c1-c2;
				//int num =c1.compareTo(c2);

				return num ==0? 1:num ;
			}
		});
		
		//遍历字符数组,将每一个字符存储在TreeSet集合中
		for (Character c : arr) {
    
    
			ts.add(c);
		}
		//遍历集合
		for (Character character : ts) {
    
    
			System.out.print(character);
		}
	}

}

프로그램이 시작된 후 quit를 입력 할 때 입력이 끝날 때까지 키보드에서 여러 개의 정수를 입력 할 수 있으며 입력 된 모든 정수는 역순으로 인쇄됩니다.

분석:

  1. 스캐너 개체, 키보드 입력 만들기
  2. TreeSet 컬렉션 개체를 만들고 TreeSet 컬렉션의 비교기를 전달합니다.
  3. 무한 루프는 정수를 계속 받아들이고 종료시 종료됩니다. 종료시 종료되므로 키보드 입력은 문자열 형식으로 입력해야합니다.
  4. 종료 된 것으로 판단되면 종료하고 그렇지 않은 경우 Integer로 변환하여 컬렉션에 추가합니다.
  5. TreeSet 컬렉션을 탐색하고 각 요소를 인쇄합니다.
public class Test6 {
    
    

	public static void main(String[] args) {
    
    
		Scanner scanner =new Scanner(System.in);
		//创建TreeSet集合对象,TreeSet集合中传入比较器
		TreeSet<Integer> ts =new TreeSet<Integer>(new Comparator<Integer>() {
    
    

			@Override
			public int compare(Integer i1, Integer i2) {
    
    
				//int num =i2 - i1;  //自动拆箱			
				int num =i2.compareTo(i1);
				return num==0? 1:num;
			}
		});
		while (true) {
    
     
			String line =scanner.nextLine();
			if ("quit".equals(line)) {
    
    
				break;
			}
			//判断是quit就退出,并将其转换为Integer,并添加到集合中
			try {
    
    
				int num =Integer.parseInt(line);
				ts.add(num);
			} catch (Exception e) {
    
    
				System.out.println("您录入的数据有误,请输入一个整数");
			}
			
		}
		//遍历TreeSet集合并打印每一个元素
		for (Integer integer : ts) {
    
    
			System.out.println(integer);
		}
	}

}

키보드 입력 학생 정보를 총점별로 정렬하고 콘솔에 출력

분석:

  1. 학생
    classMember 변수 정의 : 이름, 언어 점수, 수학 점수, 영어 점수, 총 scoreMember
    메서드 : 빈 매개 변수, 매개 변수 구조, 매개 변수 구조 매개 변수는 이름, 언어 점수, 수학 점수, 영어 점수
    toString 메서드, 컬렉션의 Student 개체를 탐색하고 개체 참조를 인쇄 할 때 속성 값이 표시됩니다.
  2. 키보드 입력에는 스캐너가 키보드 입력 개체를 생성해야합니다.
  3. TreeSet 컬렉션 개체를 만들고 TreeSet 생성자의 비교기를 전달하고 총 점수에 따라 비교합니다.
  4. 5 명을 입력하여 세트의 학생수를 판단 조건으로 사용하고, 크기가 5 명 미만인 경우 저장
  5. 입력 한 문자열을 잘라 내고 쉼표로 잘라 내면 문자열 배열이 반환되고 문자열 배열의 두 요소가 정수로 변환됩니다.
  6. 변환 된 결과를 Student 개체로 캡슐화하고 Student를 TreeSet 컬렉션에 추가합니다.
  7. TreeSet 컬렉션을 탐색하고 각 Student 개체를 인쇄합니다.
public class Student {
    
    
	private String name;
	private int chinese;
	private int math;
	private int english;
	private int sum;
	
	public Student() {
    
    
		super();
		
	}
	
	public Student(String name, int chinese, int math, int english) {
    
    
		super();
		this.name = name;
		this.chinese = chinese;
		this.math = math;
		this.english = english;
		this.sum = this.chinese+this.math+this.english;
	}

	public int getSum() {
    
    
		return sum;
	}

	@Override
	public String toString() {
    
    
		return   name + ", chinese=" + chinese + ", math=" + math + ", english=" + english + ", sum="
				+ sum ;
	}
		
}

테스트:

public class Test7 {
    
    
	public static void main(String[] args) {
    
    
				Scanner sc = new Scanner(System.in);
				System.out.println("请输入学生成绩格式是:姓名,语文成绩,数学成绩,英语成绩");
				//创建TreeSet集合对象,在TreeSet的构造函数中传入比较器,按照总分比较
				TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {
    
    

					@Override
					public int compare(Student s1, Student s2) {
    
    
						int num = s2.getSum() - s1.getSum();
						return num == 0 ? 1 : num;
					}
				});
				//录入五个学生,所以以集合中的学生个数为判断条件,如果size是小于5就进行存储
				while(ts.size() < 5) {
    
    
				//将录入的字符串切割,用逗号切割,会返回一个字符串数组,将字符串数组中从二个元素转换成int数,
					String line = sc.nextLine();
					String[] arr = line.split(",");
					int chinese = Integer.parseInt(arr[1]);
					int math = Integer.parseInt(arr[2]);
					int english = Integer.parseInt(arr[3]);
					//将转换后的结果封装成Student对象,将Student添加到TreeSet集合中
					ts.add(new Student(arr[0], chinese, math, english));
				}
				
				//遍历TreeSet集合打印每一个Student对象
				System.out.println("排序后的学生信息:");
				for (Student s : ts) {
    
    
					System.out.println(s);
				}
			}
}

추천

출처blog.csdn.net/Mr_GYF/article/details/108953615