# **基础题** ### **练习一** 请简述集合框架。

练习一

请简述集合框架。

集合按照存储结构可分为两大类,分别是单类集合Java.util.collection和双列集合java.util.Map
Collection:单列集合的根接口,用于存储一系列符合规则的元素,他有两个重要的子接口,java.util.List和java.util.Set。list集合可有序,可重复,Set集合
元素不重复,不有序。list接口的主要实现类有java.util.ArrayList和java.til.LinkedList.
Set接口的主要实现类有java.util.HashSet和java.util.TreeSet.

练习二

给定以下代码,请定义方法public static int listTest(Collection list,String s)统计集合中指定元素出现的次数,如"a":2,“b”: 2,“c” :1, “xxx”:0。

Collection<String> list = new ArrayList<>();
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("c");
System.out.println("a:"+listTest(list, "a"));	
System.out.println("b:"+listTest(list, "b"));	
System.out.println("c:"+listTest(list, "c"));
System.out.println("xxx:"+listTest(list, "xxx"));	
/**
 * 
 */
package Test1;

import java.util.ArrayList;
import java.util.Collection;

/**
 * @author sq
 * @date 2020年5月18日
 * @Desription: TODO
 */
public class Test1 {
	  public static void main(String[] args) {
	   Collection<String> list=new ArrayList(); // 创建集合对象
	   list.add("a"); // 添加a
	   list.add("a");
	   list.add("b");
	   list.add("c");
	   list.add("b");
	   System.out.println("a:"+listTest(list,"a"));// 在测式元素在集合当中出现次数的方法中传入集合list和要测试的元素a
	   System.out.println("b:"+listTest(list,"b"));
	   System.out.println("c:"+listTest(list,"c"));
	   System.out.println("xxx:"+listTest(list,"xxx"));
	  }

	/**
	 * @author sq
	 * @param @param list
	 * @param @param string
	 * @param @return
	 * @return String
	 * @time 2020年5月18日 下午7:34:48
	 * @Desription: 测试在集合中元素出现的次数
	 * @param list
	 * @param string
	 * @return
	 */
	private static int listTest(Collection<String> list, String string) {// 遍历一遍,如果集合中的元素和传入的元素相等就加1;
int count=0;
for (String string2 : list) {
	if (string.equals(string2)) {
		count++;
	}
}
		return count;
	}
	}

练习三

Collection集合数组转集合,定义一个方法,要求此方法把int数组转成存有相同元素的集合(集合里面的元素是Integer),并返回。

/**
 * 
 */
package Test1;

import java.util.ArrayList;

/**
 * @author sq
 * @date 2020年5月18日
 * @Desription: TODO
 */
public class Test2 {
public static void main(String[] args) {
	        // 把int数组加入到integer数组中
	 
	int arr[]={1,2,3,4,5};// 定义12345 int型数组
	ArrayList<Integer> list=ListArry(arr); // 泛型为Integer的集合,用数组作为参数的方法
	System.out.println(list);// 打印集合
}

/**
 * @author sq
 * @param @param arr
 * @param @return
 * @return ArrayList
 * @time 2020年5月18日 下午7:45:16
 * @Desription: TODO
 * @param arr
 * @return
 */
private static ArrayList<Integer> ListArry(int[] arr) {// Integer泛型的集合返回值,arr数组传入方法中
	// TODO Auto-generated method stub
	ArrayList<Integer> list=new ArrayList();// 创建Integer的集合
	for (Integer arr1 : arr) {// 遍历arr数组中的元素,一个个添加到Integer的集合中,完成转化
		list.add(arr1);
	}
	return list; 
}
} 

练习四

Collection集合集合转数组,定义一个集合,并把集合(集合里面的元素是Integer)转成存有相同元素的数组,并将结果输出在控制台。(可以使用Object[]数组类型接收转换的数组)

/**
 * 
 */
package Test1;

import java.util.ArrayList;

/**
 * @author sq
 * @date 2020年5月18日
 * @Desription: TODO
 */
public class Test3 {
 public static void main(String[] args) {
	   ArrayList<Integer> list=new ArrayList();// 创建Interger泛型的集合
	   list.add(100);// 添加100
	   list.add(200);
	   list.add(300);
	   Object[] obj=list.toArray();// toArray()方法转化为数组,并赋值给Obj数组
	   for (int i = 0; i < obj.length; i++) {
		System.out.println(obj[i]);// 循环输出obj数组的值
	}
}
}

练习五

Collection集合contains()方法使用,定义一个方法listTest(ArrayList al, String s),要求使用contains()方法判断al集合里面是否包含s。

/**
 * 
 */
package Test1;

import java.util.ArrayList;

/**
 * @author sq
 * @date 2020年5月18日
 * @Desription: TODO
 */
public class Test4 {
public static void main(String[] args) {
	ArrayList<String> list =new ArrayList<String>();// 创建<泛型为String>list集合
	list.add("java");// 添加java
	list.add("Ict");
	list.add("Tom");
	System.out.println(Pans(list,"javsa"));// Pans方法判断list集合中“javasa”是否包含s,如果包含s返回true,否则返回false
}

/**
 * @author sq
 * @param @param list
 * @param @param string
 * @param @return
 * @return char []
 * @time 2020年5月18日 下午8:57:15
 * @Desription: 测试集合中是否包含指定元素 contains()方法
 * @param list
 * @param string
 * @return
 */
private static boolean Pans(ArrayList<String> list, String string) {
	// TODO Auto-generated method stub
	if (string.contains("s")) {// 如果传入的“javasa” 中含有s返回true
		return true;
	}
	return false;
}
}

练习六

Collection集合isEmpty()方法的使用,定义一个方法listTest(ArrayList al), 要求使用isEmpty()判断al里面是否有元素。

/**
 * 
 */
package Test1;

import java.util.ArrayList;

/**
 * @author sq
 * @date 2020年5月18日
 * @Desription: TODO
 */
public class Test5 {
public static void main(String[] args) {
	ArrayList<String> list=new ArrayList<String>();// 创建泛型为String的list集合
	list.add("123");// 添加123
	System.out.println(PanCun(list));// 判断list集合中是否存在元素,如存在返回true否返会false
}

/**
 * @author sq
 * @param @param list
 * @param @return
 * @return char []
 * @time 2020年5月18日 下午9:08:28
 * @Desription: 判断集合中是否存在元素
 * @param list
 * @return
 */
private static boolean PanCun(ArrayList<String> list) {
	// TODO Auto-generated method stub
        if (list.isEmpty()) {// 判断空的方法,如果是空返回true
			return true;
		}
	return false;
}
}

练习七

请简述迭代器的实现原理//实现方法,用语言把代码过程描述出来

当遍历集合时,首先调用集合的Iterator()方法,然后使用hasNext()方法判断集合中是否还有下一个元素,如果有,就用next()方法调用出来,如果没有下一个元素,说明已到集合末尾,停止遍历。
Iterator对象在遍历集合元素的时候,会用Iterator.next()方法,调用一次增加一个索引下标,直到hasNext()返回false,表示到了集合的末尾,停止对元素的遍历。

练习八

定义一个方法listTest(ArrayList al, Integer s),要求返回s在al里面第一次出现的索引,如果s没出现过返回-1。

/**
 * 
 */
package Test1;

import java.util.ArrayList;

/**
 * @author sq
 * @date 2020年5月18日
 * @Desription: TODO
 */
public class Test6 {
public static void main(String[] args) {
	ArrayList<Integer> list=new ArrayList<Integer>(); // 创建泛型为Integer的list集合
	list.add(1);// 添加1
	list.add(2);
	list.add(3);
	list.add(4);
	list.add(5);
	System.out.println(PanS(list,5));// 判断5在集合中的第一次出现的索引位置
}

/**
 * @author sq
 * @param @param list
 * @param @param i
 * @param @return
 * @return char []
 * @time 2020年5月18日 下午9:24:36
 * @Desription: 获得元素在集合中的第一次索引位置,如果没获元素就返回-1
 * @param list
 * @param i
 * @return
 */
private static int PanS(ArrayList<Integer> list, Integer i) {
	// TODO Auto-generated method stub
	for (int j = 0; j < list.size(); j++) { // 循环判断,一判断到返回循环次数
		if (list.get(j).equals(i)) {
			return j;
		}
	}
	return -1;// 没找到元素返回-1;
}
}

扩展题

练习九

(复杂,并不难)定义一个学生类Student,包含三个属性姓名、年龄、性别,创建三个学生对象存入ArrayList集合中。

A:遍历集合遍历输出。

B:求出年龄最大的学生,然后将该对象的姓名变为:小猪佩奇。

/**
 * 
 */
package Test1;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @author sq
 * @date 2020年5月18日
 * @Desription: TODO
 */
class Student{
	private String name;// 姓名
	private Integer age;// 年龄
	private char sex;// 性别
	public Student(){ // 无参构造
		
	}
	public Student(String name,Integer age,char sex){
		this.name=name;
		this.age=age;
		this.sex=sex;
	}
	/**
	 * @return name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name name 
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return age
	 */
	public Integer getAge() {
		return age;
	}
	/**
	 * @param age age 
	 */
	public void setAge(Integer age) {
		this.age = age;
	}
	/**
	 * @return sex
	 */
	public char getSex() {
		return sex;
	}
	/**
	 * @param sex sex 
	 */
	public void setSex(char sex) {
		this.sex = sex;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() { 
		return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
	}
	
	
}
public class Test9 {
public static void main(String[] args) {
	   ArrayList<Student> ls=new ArrayList<Student>();
	 addStudent(ls);
	   getMax(ls);
	   printLs(ls);
	
//		for (int i = 0; i < ls.size(); i++) {
////			System.out.println(ls.get(i));
//		}
}

/**
 * @author sq
 * @param @param ls
 * @return void
 * @time 2020年5月18日 下午10:55:57
 * @Desription: 遍历打印集合
 * @param ls
 */
private static void printLs(ArrayList<Student> ls) {
	// TODO Auto-generated method stub
	for (Student student : ls) {
		System.out.println(student);
	}
}

/**
 * @author sq
 * @param @param ls
 * @return void
 * @time 2020年5月18日 下午10:53:44
 * @Desription: 添加三个学生对象到ls集合中
 * @param ls
 */
private static void addStudent(ArrayList<Student> ls) {
	// TODO Auto-generated method stub
	Student s1=new Student("美钞",100,'男');
	Student s2=new Student("人民币",10,'女');
	Student s3=new Student("欧元",30,'男');
	
	ls.add(s1);
	ls.add(s2);
	ls.add(s3);
	
}

/**
 * @author sq
 * @param @param ls
 * @return void
 * @time 2020年5月18日 下午10:48:54
 * @Desription: 得到最大年龄的元素下标,改变这个下标的姓名为小猪佩奇
 * @param ls
 */
private static void getMax(ArrayList<Student> ls) {
	// TODO Auto-generated method stub
	   int num=ls.get(0).getAge();// 初始化值
	   int index=0;// 得到下标
	   for (int i = 0; i < ls.size(); i++) {// 获得最大的年龄值以及其所在的下标
		if (num<ls.get(i).getAge()) {
			num =ls.get(i).getAge();
			index=i;
		}
		
	}
	   ls.get(index).setName("小猪佩奇"); // 设置这个最大年龄值得下标得姓名为小猪佩奇
	
}
}

练习十

产生10个1-100的随机数,并放到一个数组中,把数组中大于等于10的数字放到一个list集合中,并打印到控制台。

/**
 * 
 */
package Test1;

import java.util.ArrayList;

/**
 * @author sq
 * @date 2020年5月18日
 * @Desription: TODO
 */
public class Test10 {
	public static void main(String[] args) {
		ArrayList<Integer> ss=new ArrayList<Integer>();// 创建集合
int[] arr= new int[10]; // 定义一个10长度得数组
		for (int i = 0; i < 10; i++) { // 循环10次获得10次随机数
			int Math1=(int)(Math.random()*100);
		     arr[i]=Math1;// 给数组得1-10分别赋值获得得随机数
		}
 for (int i : arr) {// 如果数组中的值大于或等于10就添加到ss集合
	 System.out.println(i);
	if (i>=10) {
		ss.add(i);
	}
}	
 System.out.println(ss); // 打印集合
	}

}

练习十一

编写一个泛型方法,实现任意引用类型数组指定位置元素交换。

/**
 * 
 */
package Test1;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @author sq
 * @date 2020年5月18日
 * @Desription: TODO
 */
class Student{
	private String name;// 姓名
	private Integer age;// 年龄
	private char sex;// 性别
	public Student(){ // 无参构造
		
	}
	public Student(String name,Integer age,char sex){
		this.name=name;
		this.age=age;
		this.sex=sex;
	}
	/**
	 * @return name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name name 
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return age
	 */
	public Integer getAge() {
		return age;
	}
	/**
	 * @param age age 
	 */
	public void setAge(Integer age) {
		this.age = age;
	}
	/**
	 * @return sex
	 */
	public char getSex() {
		return sex;
	}
	/**
	 * @param sex sex 
	 */
	public void setSex(char sex) {
		this.sex = sex;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() { 
		return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
	}
	
	
}
public class Test9 {
public static void main(String[] args) {
	   ArrayList<Student> ls=new ArrayList<Student>();
	 addStudent(ls);
	   getMax(ls);
	   printLs(ls);
	
//		for (int i = 0; i < ls.size(); i++) {
////			System.out.println(ls.get(i));
//		}
}

/**
 * @author sq
 * @param @param ls
 * @return void
 * @time 2020年5月18日 下午10:55:57
 * @Desription: 遍历打印集合
 * @param ls
 */
private static void printLs(ArrayList<Student> ls) {
	// TODO Auto-generated method stub
	for (Student student : ls) {
		System.out.println(student);
	}
}

/**
 * @author sq
 * @param @param ls
 * @return void
 * @time 2020年5月18日 下午10:53:44
 * @Desription: 添加三个学生对象到ls集合中
 * @param ls
 */
private static void addStudent(ArrayList<Student> ls) {
	// TODO Auto-generated method stub
	Student s1=new Student("美钞",100,'男');
	Student s2=new Student("人民币",10,'女');
	Student s3=new Student("欧元",30,'男');
	
	ls.add(s1);
	ls.add(s2);
	ls.add(s3);
	
}

/**
 * @author sq
 * @param @param ls
 * @return void
 * @time 2020年5月18日 下午10:48:54
 * @Desription: 得到最大年龄的元素下标,改变这个下标的姓名为小猪佩奇
 * @param ls
 */
private static void getMax(ArrayList<Student> ls) {
	// TODO Auto-generated method stub
	   int num=ls.get(0).getAge();// 初始化值
	   int index=0;// 得到下标
	   for (int i = 0; i < ls.size(); i++) {// 获得最大的年龄值以及其所在的下标
		if (num<ls.get(i).getAge()) {
			num =ls.get(i).getAge();
			index=i;
		}
		
	}
	   ls.get(index).setName("小猪佩奇"); // 设置这个最大年龄值得下标得姓名为小猪佩奇
	
}
}

你可能感兴趣的:(# **基础题** ### **练习一** 请简述集合框架。)