请简述集合框架。
集合按照存储结构可分为两大类,分别是单类集合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("小猪佩奇"); // 设置这个最大年龄值得下标得姓名为小猪佩奇
}
}