首页 > 代码库 > 集合练习

集合练习

package com.lianxi;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;

import com.hanqi.DataSourceModel;
import com.hanqi.Student;

public class Practise {

    public static void main(String[] args) {
        /*
         * 准备数据
         * 定义一个Student类, 有两个属性, name和age
         * 定义一个DataSourceModel类, 分别定义三个方法, 
         * 这三个方法分别可以获取到含有内容的List<Student>, Set<Student>, Map<Integer, Student>
         * Map中的key值, 作为Student的学号, 学号采用自增的方式:从1001开始
         * 
         * List练习:
         *         添加一个学生, 姓名为"Paulo", 年龄为29, 并显示出所有学生姓名
         *         删除Jim的信息
         *         将所有学生信息按照年龄排序, 由大到小显示出来
         *         写一个方法, 将学生分为三组, 并将每组信息显示出来
         *         写一个方法, 在数据源中删除重复的学生信息
         *         显示出姓名以J开头的学生信息
         *         显示出年龄大于25的学生信息
         * Set练习
         *         重写Student的equals方法, 使得在获取Set的时候没有重复的学生信息
         *         显示所有学生信息(不带重复)
         * Map练习
         *         显示所有学生信息, 带学号
         *         将第二个Odom更名为Tomson, 并将更名后的学生信息再显示出来
         *         将学号为1007的学生删除, 并将删除的学生信息显示
         * 
         *         Iterator练习
         *             取出所有的学号, 迭代之后显示学号为1004-1009
         *             并将1005学号的信息删除, 删除之后再显示出所有学生信息
         * 选做练习
         *         ?定义一个专业(Major)类, 属性自拟, 学生信息和这个类关联, 一个学生可以有多个专业
         *         ?显示所有学生的姓名和所学专业
         */
        //添加一个学生, 姓名为"Paulo", 年龄为29, 并显示出所有学生姓名
        List<Student> list=DataSourceModel.getStuList();
        Student stu14 = new Student("Paulo", 29);
        list.add(stu14);
        for(Student stu:list){
            System.out.println(stu.getName());
        }
        System.out.println();
        //删除Jim的信息
        Student stu15 = new Student("Jim", 22);
        list.remove(stu15);
        System.out.println(list);
        //将所有学生信息按照年龄排序, 由大到小显示出来
        Random r = new Random();
        Collections.sort(list);
        System.out.println(list);

/*        int x=14;
        int group = 5;

        for (int i = 0; i < x; i++) {
            list.add("no" + i);
        }

        for (int i = 0; i < x; i++) {
            if (i % group == 0) {
                System.out.println("第" + (i / group + 1) + "组");
            }
            int s = r.nextInt(x - i);
            if (list.size() == 0) {
                break;
            }
            System.out.println(list.remove(s));
        }*/
        System.out.println("==============");
        int a=0;
        for(int i=0;i<list.size();i++){
            for(int j=0;j<list.size();j++){
                if(list.get(i).equals(list.get(j))&&i!=j ){
                    list.remove(i);
                }
        }
    }
        System.out.println(list.size());
        System.out.println();
        for(Student s:list){
            if(s.getName().startsWith("J")){
                System.out.println(s.getName()+","+s.getAge());
            }
        }
        
        
        Set s=DataSourceModel.getStuSet();
        System.out.println(s);
        System.out.println(s.size());
        System.out.println();
        
        Map m=DataSourceModel.getStuMap();
        System.out.println(m);
        m.remove(1007);
        System.out.println("======================");
        System.out.println(m);
        
        
        System.out.println("======================");
        Set<Integer> setKey=m.keySet();
        Iterator<Integer> i= setKey.iterator();
        while(i.hasNext()){
            int sno=i.next();
            if(sno>=1004&&sno<=1009){
                 if(sno==1005){
                     i.remove();
                 }
                 System.out.println(sno+"---"+m.get(sno));
            }
            
        }
        
    }

}

技术分享

package com.hanqi.jihe;

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

public class Lianxi {
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add("qqq");
        list.add("rrr");
        list.add("sss");
        list.add("ttt");
        list.add("yyy");
        //没有下标可以提前定义int a =0;
    /*    int a =0;
        for(Object s:list){
            a++;
            System.out.println(s);
            System.out.println(a);
        }
        */
/*        System.out.println(list);
        Collections.sort(list);
        System.out.println(list);
        Collections.shuffle(list);
        System.out.println(list);*/
/*        Map m=new HashMap();
        m.put(1, "www");
        m.put(2, "rrr");
        m.put(3, "ttt");
        m.put(4, "uuu");
        System.out.println(m.keySet());*/
        List list2=new ArrayList();
        for(int i=0;i<10;i++){
            list2.add(i);
        }
        System.out.println(list2);
        Collections.sort(list2);
        System.out.println(list2);
        int a=Collections.binarySearch(list2, 5);
        System.out.println(a);
        //Collections.copy(list2, list);
        System.out.println(list2);
    }

}

技术分享

接口在输出调用时需要重写equals方法,ToString方法,hashcode方法


自动打包/解包(自动拆箱/装箱)
自动将基础类型转换为对象(装箱)
自动将对想转换为基础数据类型(拆箱)

Comparable接口, Collections类
Collections的常用算法:
sort(List); 排序
如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个类大小的方法
shuffle(List); 随机排列
void reverse(List); 逆序排列(Linked效率较高)
copy(); 复制集合, 前提是size()相同(长度, 和容量的区别)
fill(List, Object);使用某个对象填充整个List
binarySearch();二分搜索法

泛型(Generic)(1.5之后才有泛型)
1, 装入集合的类型都被当作Object对待, 从而失去了自己的实际类型
2, 集合中秋出来的时候需要转型, 效率低, 易出错

好处: 增强程序的可读性和稳定性

总结:
集合是数组的一种延伸, 与数组相比有很多好处和优点,
1, 可以存放不同的类型
2, 长度可变
3, 随时存放和获取

六个接口和一个类:
List
Map
Set
Iterator
Collection
Comparable

Collections类

选择一种集合类型是一件非常痛苦的事
在以后的编程中要考虑读取和修改的效率问题, 数据的存取在以后的使用过程中, Collection是主要的载体,
Array: 读快改慢
Linked: 读慢改快
Hash: 介于两者之间的

 

集合练习