Java实验报告(6)

Java实验报告(实验6)

henu大二Java实验作业

实验目的:

1、掌握容器类的层次结构;

2、掌握Collection接口和List接口的常用方法;

3、掌握Iterator接口的使用方式;

4、掌握Set接口和hashCode的使用方式;

5、掌握Map接口的使用方式。

实验内容:

1.

将下列数据:“hello”、123、6.9、“hello”、“”、“Hello”、StringBuffer s=new StringBuffer(“abc”);中的s,添加到一个ArrayList对象中,并输出结果。

•    练习修改元素、获取元素、打印输出。

•    查找元素“hello”。

•    删除指定的元素“hello”。

•     将元素123替换为1000。

源代码:

import java.util.*;
public class S6_1 {
        public static void main(String [] args){
            StringBuffer s=new StringBuffer("abc");
            ArrayList list=new ArrayList();
            list.add("hello");
            list.add(123);
            list.add(6.9);
            list.add("hello");
            list.add("");
            list.add("Hello");
            list.add(s);
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }
            System.out.println("---");
            Iterator it=list.iterator();
            System.out.println("hello的位置为:");
           for(int i=0;i<list.size();i++){
               if("hello".equals(list.get(i))){
                   System.out.println(i);
               }
           }
            

            while(it.hasNext()){
                Object obj=it.next();
                if("hello".equals(obj)){
                   it.remove();
                }
            }
            list.set(list.indexOf(123),1000);
            System.out.println("----");
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }
        }
}

运行效果:

 2.

使用ArrayList集合,对其添加10个不同的元素,并使用Iterator遍历该集合。提示:

•    使用add()方法将元素添加到ArrayList集合中。

•    调用集合的iterator()方法获得Iterator对象,并调用Iterator的hasNext()和next()方法,迭代出集合中的所有元素。

•    查找键盘输入的元素。

•    将重复的元素删除。

import java.util.*;
public class S6_2 {
    public static void main(String [] args){
        ArrayList list=new ArrayList();
        list.add("123");
        list.add("123");
        list.add("456");
        list.add("456");
        list.add("wonendie");
        list.add("zjc");
        list.add("zjc");
        list.add("789");
        list.add("adgdg");
        list.add("789");
        Iterator it=list.iterator();
        while(it.hasNext()){
            Object obj=it.next();
            System.out.println(obj);
        }
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入要查找的数据:");
        String s=sc.next();
        for (int i = 0; i < list.size(); i++) {
        if(s.equals(list.get(i))){
            System.out.println("位置在:"+i);
        }
        }
        HashSet<String> hs=new HashSet<String>();
        hs.addAll(list);
        list.clear();
        list.addAll(hs);
        System.out.println("删除重复后:"+list);
    }
}

运行效果:

 3.

去除集合中自定义对象(如Person类,属性包括姓名和年龄)的重复值(对象的成员变量值都相同)。

import java.util.*;

public class S6_3 {
    public static void main(String [] args){
        HashSet hs=new HashSet();
        Person p1=new Person("张家城",18);
        Person p4=new Person("李章曜",20);
        Person p2=new Person("吴洲佳",19);
        Person p3=new Person("张家城",18);
        hs.add(p1);
        hs.add(p2);
        hs.add(p3);
        hs.add(p4);
        System.out.println(hs);
    }
}
class Person{
    public String   name;
    public int age;
    public Person(String name,int age){
        this.age=age;
        this.name=name;
    }
    //重写toString 方法
    public String toString(){
        return name+":"+age;
        
    }
    //重写hashCode方法
    public int hashCode(){
        return name.hashCode();//返回name属性的散列值
        }
    //重写equals方法
    public boolean equals(Object obj){
        if(this==obj){
            return true;
        }
        else if(!(obj instanceof Person)){
            return false;
        }
        Person p=(Person) obj;
        boolean b=this.name.equals(p.name);
        return b;
    }
    }

运行结果;

 

4.

编写程序将一组学生对象的姓名和成绩存入到一个树集(TreeSet中,完成以下要求:

•    使得按照成绩自动降序排列,并输出排序的结果。

•    从一个无序数组中,剔除重复元素,并按升序排序

import java.util.TreeSet;
import java.util.*;
public class S6_5 {
    public static void main(String [] args){
        TreeSet ts=new TreeSet(new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Student s1=(Student)o1;
                Student s2=(Student)o2;
                if(s1.score.hashCode()>(s2.score.hashCode())){
                    return -1;
                }else if(s1.score.hashCode()<s2.score.hashCode()){
                    return 1;
                }
                else {
                    return s1.name.compareTo(s2.name);//当score相等时,比较name;
                }
            }

        });
        ts.add(new Student("98","zhang"));
        ts.add(new Student("60","li"));
        ts.add(new Student("60","ab"));
        System.out.println(ts);
        TreeSet st=new TreeSet();
        st.add(123);
        st.add(12);
        st.add(12);
        st.add(34);
        st.add(356);
        System.out.println(st);

    }
}
class Student {
    public  String score;
    public  String name;
    public Student(String score,String name){
        this.score=score;
        this.name=name;
    }
    public String toString() {
        return score + ":" + name;
    }
    public int hashCode(){
        return score.hashCode();
    }
}

运行结果:

5.

编写一个程序,读取个数不定的整数,然后查找其中出现频率最高的数字。当输入为0时,表示结束输入。如:

如果输入的数据是2   3   40   3   54   -3   3   3   2   0,那么数字3的出现频率是最高的。请一次输入一个数字。

如果出现频率最高的数字不是一个而是多个,则应该将它们全部输出。例如:在线性表9  30  3  9  3  2  4中,3和9都出现了两次,3和9都应该输出。

提示:可以定义两个集合,一个存放所有输入的数据,另一个存放出现频率最高的数字。

 

import java.util.*;
public class S6_6
{
    public static void main(String[] args)
    {
        Scanner reader=new Scanner(System.in);
        HashMap<Integer,Integer> tm=new HashMap<Integer,Integer>();
        while (true)
        {
            int a=reader.nextInt();
            if (a==0)
            {
                break;
            }
            if (tm.containsKey(a))
            {
                int value1=tm.get(a);
                value1++;
                tm.put(a,value1);
            }
            else
            {
                tm.put(a,1);
            }
        }

        Collection<Integer> c = tm.values();
        Object[] obj = c.toArray();
        Arrays.sort(obj);//升序排列

        Set keySet=tm.keySet();
        Iterator it2=keySet.iterator();
        while (it2.hasNext())
        {
            Object key=it2.next();
            Object value=tm.get(key);
            if (obj[tm.size()-1]==value)
            {
                System.out.println("频率最高的数据为:");
                System.out.println(key);
            }
            //System.out.println(key+":"+value);
        }

    }
}

运行结果:

数据:1 1 1 2 2 2 3 3 4 5

6. 

统计字符串中每个单词出现的次数,使用HashMap来实现。例如:“Today, We have a class of java, as we kown, java is an object oriented  programming language, and java is fun! wish you enjoy it!”,统计结果存储成以下形式:

a-->1

an-->1

and-->1

as-->1……

is-->2

提示:使用String.split(("[ \n\t\r.,;:!?()]")方法进行分词,空格,标点符号等。

import java.util.*;
public class S6_8 {
        public static void main(String[] args) {
            String str = "Today, We have a class of java, as we kown, java is an object oriented  programming language, and java is fun! wish you enjoy it";

            HashMap<String, Integer> hm = new HashMap<>();    //定义一个双列集合
            String[] strs = str.split("[ \\n\\t\\r.,;:!?()]");                                               //分割成若干字符串

            for (int i = 0; i < strs.length; i++) {                                  //判断每个字符串,是存在于集合里
                if (!hm.containsKey(strs[i])) {
                    hm.put(strs[i], 1);                    //如果不存在,则存进去
                } else {
                    Integer counts = hm.get(strs[i]);                        //如果存在 ,先找到 此key对应的 value值
                    hm.put(strs[i], counts + 1);                   //覆盖前者的的key值,并且比前者多加一次
                }
            }
            Iterator<String> it=hm.keySet().iterator();                    //获取HashMap所有的key集合并遍历
            while(it.hasNext()) {
                String keyName=it.next();
                System.out.println(keyName+"->"+hm.get(keyName));

            }
        }
}

运行结果:

 

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
掌握集合的概念、体系结构、分类及使用场景 2)了解Set接口及主要实现类(HashSet、TreeSet) 3)了解List接口及主要实现类(ArrayList、LinkedList、Vector) 4)了解Map接口及主要实现类(HashMap、TreeMap、HashTable) 二、实验内容及步骤 1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 姓名:李四 身份证号:178880003 姓名:王五 身份证号:178880002 姓名:李四 身份证号:178880004 注意:因为Person类是自定义类,需要重写hashCode()方法equals()方法,并规定只有姓名和身份证号都相等,则对象相等。 其中计算哈希码的算法:(31 + ((name == null) ? 0 : name.hashCode()))*31 + id (注:name:Person对象的姓名,id:Person对象的身份证号) 主方法中作如下测试: 1)创建一个可放置Person类对象的HashSet; 2)依次添加上述5个对象到HashSet中; 3)把集合中的元素打印出来(使用迭代器Iterator) 2、编写程序练习List集合的基本使用: 1) 创建一个只能容纳String对象名为names的ArrayList集合; 2)按顺序往集合中添加5个字符串对象:"张三"、"李四"、"王五"、"马六"、"赵七"; 3)对集合进行遍历,分别打印集合中的每个元素的位置与内容; 4)打印集合的大小,然后删除集合中的第3个元素,并显示删除元素的内容,然后再打印目前集合中第3个元素的内容,并再次打印集合的大小。 3、编写程序练习Map集合的基本使用: 1)创建一个只能容纳String对象的person的HashMap集合; 2)往集合中添加5个"键-值"对象: "id"-"1"; "name"-"张三"; "sex"-"男"; "age"-"25"; "hobby"-"爱学Java" 3)对集合进行遍历,分别打印集合中的每个元素的键与值; 4)打印集合的大小,然后删除集合中的键为age的元素,并显示删除元素的内容,并再次打印集合的大小。 四、思考题 1、集合中的List、Set、Map有哪些不同? 2、为什么使用集合框架,而尽可能少用数组作为存储结构? 3、如何使用TreeSet实现第一题?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值