一篇文章让你精通:java集合讲解(练习处理)

Posted 韶光不负

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇文章让你精通:java集合讲解(练习处理)相关的知识,希望对你有一定的参考价值。

紧跟上文,相信前面文章让你对集合有一定了解,下面让我们对集合进行案例讲解,让你能够更加了解与使用集合。

问题一:找出下面错误的代码,并进行改正

package com.luo_sf.map;

public class Text {
    public int gutIndexofArray(float[] f){
        int res=0;
        float objf=3.4;
        List list=null;
        for (int i = 0; i <f.size ; i++) {
            list.add(f[i]);
        }
        for (int i = 0; i <list.size() ; i++) {
            float tmp=(float)list.get(i);
            if(objf==tmp){
                res=i;
            }
        }
        return res;
        
    }
}

解析:

1,基本数据类型的掌握,在jdk8中float类型是整数时,数字后面可以不用加f,但如果是小数时必须添加f(例如 float f =2.3f)

2,当我们在函数当中定义集合时,要在栈中开辟空间,所以不能使用null;

3,在数组中有length方法,没有size方法。

答案:

package com.luo_sf.map;

import java.util.ArrayList;

public class Text {
    public int gutIndexofArray(float[] f){
        int res=0;
        float objf=3.4f;//小数加f
        ArrayList list=new ArrayList(); //不能使用null
        for (int i = 0; i <f.length ; i++) {
            //数组当中没有size方法
            list.add(f[i]);
        }
        for (int i = 0; i <list.size() ; i++) {
            float tmp=(float)list.get(i);
            if(objf==tmp){
                res=i;
                break;//改进,查找第一个
            }
        }
        return res;
    }

    public static void main(String[] args){
        float [] ft={1.2f,3.4f,6,3.5f,9,3.4f};
        Text test=new Text();
        int val=test.gutIndexofArray(ft);
        System.out.println(val);
    }
}

问题二:查看下面代码,打印输出的值是什么?

package com.luo_sf.map;

import java.util.ArrayList;
import java.util.List;

public class Text {
    public static void print(List<Integer> al){
        al.add(2);
        al=new ArrayList<Integer>();
        al.add(3);
        al.add(4);
    }

    public static void main(String[] args){
       List<Integer> al=new ArrayList<>();
       al.add(1);
       print(al);
       System.out.println(al.get(1));
       System.out.println(al);
    }
}

解析:

main函数是开始所以我们先找到main函数进行解析,我们可以看到创建了al变量,并创建了一个List空间,添加了元素1(如下图)

在进入到创建print函数当中,因为我们传入al,在al中添加了2,创建了al变量,并开辟了空间(开辟空间的后print中的al指向新的List)(如下图)

然后在新的List下添加元素3和4.

 

 当我们最后输出是一个弹栈的过程,所以输出的应该是2与数组【1,2】.

答案:

练习1:完成下面要求

1,实现List到Map的转化具体要求如下
2,定义public void listtoMap方法,把list中Student元素封装到Map中
3,使用构造方法1创建多个学生信息并加入list
4,遍历List,输出全部学生信息
5,将list中学生信息放入到map当中
6,遍历map,输出Entry的key与value

一,创建学生类

package com.luo_sf.map;
//创建测试用的学生类
public class Student {
    private int id;
    private String name;
    private int age;
    private Double scpre;

    public Student() {
    }

    public Student(int id, String name, int age, Double scpre) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.scpre = scpre;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public Double getScpre() {
        return scpre;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setScpre(Double scpre) {
        this.scpre = scpre;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\\'' +
                ", age=" + age +
                ", scpre=" + scpre +
                '}';
    }
}

二,书写方法

package com.luo_sf.map;

import java.util.*;

/**
 * 实现List到Map的转化具体要求如下
 * 定义public void listtoMap方法,把list中Student元素封装到Map中
 * 使用构造方法1创建多个学生信息并加入list
 * 遍历List,输出全部学生信息
 * 将list中学生信息放入到map当中
 * 遍历map,输出Entry的key与value
 */

public class Text {

    public static Map lsittoMap(List<Student> list){
        Map<Integer,Student> map=new HashMap<>();
        for (Student stu: list) {
            map.put(stu.getId(),stu);
        }
        return map;
    }
    public static void main(String[] args){


        //创建多个学生对象
        Student stu1=new Student(1,"xiaoming",18,78.5);
        Student stu2=new Student(2,"zhangsan",19,88.5);
        Student stu3=new Student(3,"lishi",20,67.5);
        Student stu4=new Student(4,"wangwu",18,88.5);
        Student stu5=new Student(5,"xiaobai",17,98.5);

        //添加入List
        List<Student> list= new ArrayList<>();
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        list.add(stu4);
        list.add(stu5);

       //遍历数组
        for (Student stu: list) {
            System.out.println(stu);
        }

        //list转化为Map
        Map map=lsittoMap(list);

        //遍历map
        Set<Map.Entry<Integer,Student>> entrySet =map.entrySet();
        for (Map.Entry<Integer,Student> entry:entrySet){
            System.out.println(entry);
        }
    }

}

功能2:定义mapToList()将Map映射信息封装到List中

创建一个实体类StudentEntry,可以存储Map中每一个Entry的信息
使用构造方法Student创建学生信息,并使用学生作为key
创建List对象,每一个元素都是StudrentEntry
将Map中每一个Entry信息放入List对象
 

创建一个实体类StudentEntry并加入List中

package com.luo_sf.map;

//创建StudentEntry类
public class StudentEntry {
    private int key;
    private Student value;

    public StudentEntry() {
    }

    public StudentEntry(int key, Student value) {
        this.key = key;
        this.value = value;
    }

    public int getKey() {
        return key;
    }

    public Student getValue() {
        return value;
    }

    public void setKey(int key) {
        this.key = key;
    }

    public void setValue(Student value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "StudentEntry{" +
                "key=" + key +
                ", value=" + value +
                '}';
    }
}

package com.luo_sf.map;

import com.sun.deploy.util.SyncAccess;

import java.util.*;

/**
 * 实现List到Map的转化具体要求如下
 * 定义public void listtoMap方法,把list中Student元素封装到Map中
 * 使用构造方法1创建多个学生信息并加入list
 * 遍历List,输出全部学生信息
 * 将list中学生信息放入到map当中
 * 遍历map,输出Entry的key与value
 */

/**
 * 功能2:定义mapToList()将Map映射信息封装到List中
 * 创建一个实体类StudentEntry,可以存储Map中每一个Entry的信息
 * 使用构造方法Student创建学生信息,并使用学生作为key
 * 创建List对象,每一个元素都是StudrentEntry
 * 将Map中每一个Entry信息放入List对象
 * 说明Comparable作用,并提过分数对学生进行排序
 */

public class Text {

    public static List<StudentEntry> mapToList(Map<Integer,Student> map){
        //创建List
        List<StudentEntry> list =new ArrayList<>();
        //遍历Map并存储到List中
        Set<Map.Entry<Integer,Student>> entrySet=map.entrySet();
        for(Map.Entry<Integer,Student> entry: entrySet){
            Integer key=entry.getKey();
            Student value=entry.getValue();
            StudentEntry studentEntry =new StudentEntry(key,value);
            list.add(studentEntry);
        }
        //返回List
        return list;
    }

    public static Map lsittoMap(List<Student> list){
        Map<Integer,Student> map=new HashMap<>();
        for (Student stu: list) {
            map.put(stu.getId(),stu);
        }
        return map;
    }
    public static void main(String[] args){


        //创建多个学生对象
        Student stu1=new Student(1,"xiaoming",18,78.5);
        Student stu2=new Student(2,"zhangsan",19,88.5);
        Student stu3=new Student(3,"lishi",20,67.5);
        Student stu4=new Student(4,"wangwu",18,88.5);
        Student stu5=new Student(5,"xiaobai",17,98.5);

        //添加入List
        List<Student> list= new ArrayList<>();
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        list.add(stu4);
        list.add(stu5);

       //遍历数组
        for (Student stu: list) {
            System.out.println(stu);
        }

        //list转化为Map
        Map map=lsittoMap(list);

        //遍历map
        Set<Map.Entry<Integer,Student>> entrySet =map.entrySet();
        for (Map.Entry<Integer,Student> entry:entrySet){
            System.out.println(entry);
        }

        List<StudentEntry> list2=mapToList(map);
        list2.forEach(System.out::println);
    }

}

以上是关于一篇文章让你精通:java集合讲解(练习处理)的主要内容,如果未能解决你的问题,请参考以下文章

一篇文章让你精通:java集合讲解

一篇文章让你精通:java集合讲解(三,Set)

一篇文章让你精通:java集合讲解(二,LinkList)

一篇文章让你精通:java集合讲解(八,集合的解析与总结)

一篇文章让你精通:java集合讲解(四,Set)

一篇文章让你精通:java集合讲解(六,Map)