黑马程序员--集合二

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

集合二

Map

Map:一次添加一对元素,Collection一次添加一个元素。
Map也称为双列集合,Collection集合称为单列集合。
其实Map集合中存储的就是键值对。
map集合中必须保证键的唯一性。

常用方法:
1、添加
value put(key,value):返回前一个和key关联的值,如果没有返回null。
2、删除
void clear():清空map集合。
value remove(Object key):根据指定的key删除这个键值对。
3、判断
boolean containsKey(key);
boolean containsValue(value);
boolean isEmpty();
4、获取
value get(key):通过键获取值,如果没有该键返回null。
当然可以通过返回null,来判断是否包含指定键。
int size():获取键值对个数。

public static void  main(String[] args){
        Map<Integer,String> map = new HashMap<Integer,String>();
        map.put(8, "namea");
        map.put(4, "nameb");
        map.put(6, "namec");
        map.put(4, "named");


        System.out.println("获取元素方法一:--------------------- ");
        Set<Integer> keySet = map.keySet();
        Iterator<Integer> it = keySet.iterator();
        while(it.hasNext()){
            Integer key = it.next();
            System.out.println(key+":"+map.get(key));
        }
        //移除
        map.remove(6);
        System.out.println("获取元素方法二--------------------");
        Set<Map.Entry<Integer, String>> setEntry = map.entrySet();
        Iterator<Map.Entry<Integer, String>> itEntry = setEntry.iterator();
        while(itEntry.hasNext()){
            Map.Entry<Integer, String> entry = itEntry.next();
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
        if(map.containsKey(8)){
            System.out.println("map contain Key 8");
        }else{
            System.out.println("map didn't contain Key 8");
        }
        //清除全部
        map.clear();
        if(map.isEmpty()){
            System.out.println("map 是空的");
        }else{
            System.out.println("map 不是空的");
        }
    }

这里写图片描述

Map常用的子类:
|–Hashtable:内部结构是哈希表,是同步的。不允许null作为键,null作为值。
|–Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。
|–HashMap:内部结构式哈希表,不是同步的。允许null作为键,null作为值。
|–TreeMap:内部结构式二叉树,不是同步的。可以对Map结合中的键进行排序。
hashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。

public static void main(String[] args) {
        HashMap<Student, String> hm = new HashMap<Student, String>();
        hm.put(new Student("lisi", 46), "北京");
        hm.put(new Student("zhaoliu", 34), "上海");
        hm.put(new Student("xiaoqiang", 31), "沈阳");
        hm.put(new Student("wangcai", 28), "大连");
        hm.put(new Student("zhaoliu", 24), "铁岭");

        Iterator<Student> it = hm.keySet().iterator();
        while (it.hasNext()) {
            Student key = it.next();
            System.out.println(key.getName() + ":" + key.getAge() + "-----"
                    + hm.get(key));
        }
    }

}

class Student {
    private String name;
    private int age;

    public Student() {
    }

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

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

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (age != other.age) {
            return false;
        }
        if (name == null) {
            if (other.name != null) {
                return false;
            }
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
}

这里写图片描述

public static void main(String[] args) {
        TreeMap<Student,String> tm = new TreeMap<Student,String>(new ComparatorByName());
        tm.put( new Student("lisi" ,38),"北京");
        tm.put( new Student("zhaoliu" ,24),"上海");
        tm.put( new Student("xiaoqiang" ,31),"沈阳");
        tm.put( new Student("wangcai" ,28),"大连");
        tm.put( new Student("zhaoliu" ,24),"铁岭");
        Iterator<Student> it = tm.keySet().iterator();
        while(it.hasNext()){
            Student st = it.next();
            System.out.println(st.getName()+":"+st.getAge()+"---"+tm.get(st));
        }
    }
}

class ComparatorByName implements Comparator<Student>{

    public int compare(Student o1, Student o2) {
        int temp = o1.getName().compareTo(o2.getName());
        return temp ==0?o1.getAge()-o2.getAge():temp;
    }

}

这里写图片描述

linkedHashMap

链表结构,与存入的顺序相关

public static void main(String[] args) {
        HashMap<Integer,String> hm = new LinkedHashMap<Integer,String>();
        hm.put(7, "zhouqi");
        hm.put(3, "zhangsan");
        hm.put(1, "qianyi");
        hm.put(5, "wangwu");
        Iterator<Map.Entry<Integer,String>> it = hm.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<Integer, String> entry = it.next();
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
    }

Collections 工具类

collections:是集合框架的工具类,里面的方法都是静态的。

void sort(List list);//对list进行排序
void sort(List list,Comparator comparator);//对list进行指定顺序排序

Comparator reverseOrder();//返回一个比较器,与原排序相反。
Comparator reverseOrder(Comparator com);//返回一个比较器,与传入的比较器排序相反。
void shuffle(List list) //对集合进行位置进行随机置换。

public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("abcde");
        list.add("cba");
        list.add("zhangsan");
        list.add("zhaoliu");
        list.add("xiaoqiang");
        sortDemo(list);
    }

    public static void sortDemo(List<String> list){
        System.out.println(" -----------sort list-----------");
        Collections.sort(list);
        System.out.println(list);
        System.out.println("----sort list depend on comparatorBylength-----");
        Collections.sort(list, new ComparatorBylength());
        System.out.println(list);
        System.out.println("---------sortDemo----------");
        //二分法查找目标位置
        int index = Collections.binarySearch(list, "aaa");
        System.out.println("index = "+index);

        //获取最大值
        String max = Collections.max(list, new ComparatorBylength());
        System.out.println("max = " +max);

        System.out.println("-----------获取随机列表-------");
        Collections.shuffle(list);
        System.out.println(list);


    }

class ComparatorBylength implements Comparator<String>{

    public int compare(String arg0, String arg1) {
        int temp =arg0.length() - arg1.length();
        return temp == 0?arg0.compareTo(arg1):temp;
    }

}

这里写图片描述

Arrays工具类

Arrays:集合框架的工具类,里面的方法都是静态的。

Arrays.toString(list) 按数组格式打印数组

public static void main(String[] args) {
        int[] arr = {3,1,5,6,4,7};
        System.out.println(Arrays.toString(arr));
    }

这里写图片描述

List Arrays.asList(list) 将数组转成集合,可以用集合的方法操作数组。

    public static void main(String[] args) {
        String[]  arr = {"abc","haha","xil"};
        List<String> list = Arrays.asList(arr);
        System.out.println("list.contains(\"xil\") = "+list.contains("xil"));
    }

这里写图片描述

数组的长度是固定的,所以对于结合的增删方法是不可以使用的,否则,会发生UnsupportedOperationException.
转换的过程中:
如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行集合存储。
如果数组中的元素是基本类型数值,那么会将该数组作为集合中的元素进行存储。

public static void main(String[] args) {
        int[] arr = {31,11,51,61};
        List<int[]> list1 = Arrays.asList(arr);
        System.out.println(list1);
        Integer[] arr2 = {31,11,51,65};
        List<Integer> list2 =Arrays.asList(arr2);
        System.out.println(list2);
    }

这里写图片描述

集合转数组

使用的就是Collection接口中的toArray方法。
集合转成数组,可以对集合中的元素操作的方法进行限定,不允许对其进行增删。

toArray方法需要传入一个指定类型的数组。
长度该如何定义呢?
如果长度小于集合的size,那么该方法会创建一个同类型并和集合相同的size的数组。如果长度大于集合的size,那么该方法就会使用指定的数组,存储集合中的元素,其他位置默认为null。
结论:最后长度就指定为,集合的size。

public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("abc");
        list.add("def");
        list.add("ghi");
        String[] arr = list.toArray(new String[list.size()]);
        System.out.println(Arrays.toString(arr));
    }   

这里写图片描述

System类

long currentTimeMillis();获取当前时间的毫秒值,可以通过此方法检测程序的执行时间。

Properties getProperties();确定当前的系统属性。
Properties集合中存储的都是String类型的键和值。
最好使用它自己的存储和取出的方法来完成元素的操作。

    public static void main(String[] args) {
        long l1 = System.currentTimeMillis();
        System.out.println(l1);

        Properties prop = System.getProperties();
        Set<String> nameset = prop.stringPropertyNames();
        for(String name :nameset){
            String value = prop.getProperty(name);
            System.out.println(name +"="+value);
        }
    }

输出结果:
1447290953615
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C:\Program Files\Java\jre7\bin
java.vm.version=24.71-b01
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.script=
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=F:\workspace\ssic\my
java.runtime.version=1.7.0_71-b14
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C:\Program Files\Java\jre7\lib\endorsed
os.arch=amd64
java.io.tmpdir=C:\Users\for\AppData\Local\Temp\
line.separator=

java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows 8.1
sun.jnu.encoding=GBK
java.library.path=C:\Program Files\Java\jre7\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Lenovo\FusionEngine;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Common Files\lenovo\easyplussdk\bin;C:\Program Files (x86)\iFLYTEK\VoiceAssistant\SpeechPlusRuntime;C:\Program Files (x86)\Lenovo\Voice SDK;C:\Program Files\Java\jdk1.7.0_71\bin;.
java.specification.name=Java Platform API Specification
java.class.version=51.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=6.3
user.home=C:\Users\for
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=UTF-8
java.specification.version=1.7
user.name=for
java.class.path=F:\workspace\ssic\my\bin
java.vm.specification.version=1.7
sun.arch.data.model=64
java.home=C:\Program Files\Java\jre7
sun.java.command=day20.SystemDemo
java.specification.vendor=Oracle Corporation
user.language=zh
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.7.0_71
java.ext.dirs=C:\Program Files\Java\jre7\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
sun.boot.class.path=C:\Program Files\Java\jre7\lib\resources.jar;C:\Program Files\Java\jre7\lib\rt.jar;C:\Program Files\Java\jre7\lib\sunrsasign.jar;C:\Program Files\Java\jre7\lib\jsse.jar;C:\Program Files\Java\jre7\lib\jce.jar;C:\Program Files\Java\jre7\lib\charsets.jar;C:\Program Files\Java\jre7\lib\jfr.jar;C:\Program Files\Java\jre7\classes
java.vendor=Oracle Corporation
file.separator=\
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=amd64

Runtime类

每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。应用程序不能创建自己的 Runtime 类实例。

Math类

Math:提供了操作数学运算的方法
常用方法:
ceil():返回大于参数的最小整数。
floor():返回小于参数的最大整数。
round():返回四舍五入的整数。
pow(a,b):a的b次方。

public static void main(String[] args) {
        System.out.println("Math.ceil(12.56) = "+Math.ceil(12.56));
        System.out.println("Math.floor(12.56) = "+Math.floor(12.56));
        System.out.println("Math.round(12.56) ="+Math.round(12.56));

        System.out.println("Math.pow(2, 10) = "+Math.pow(2, 10));

        Random r = new Random();
        for(int i=0;i<5;i++){
            System.out.println("Math.random()="+Math.random());
        }
        System.out.println("-----------");
        for(int i=0;i<5;i++){
            System.out.println("r.nextDouble()="+r.nextDouble());
        }
    }

这里写图片描述

Date、DateFormat类

日期对象和毫秒值之间的转换
毫秒值–>日期对象:
1. 通过Date对象的构造方法 new Date(timeMillis);
2. 还可以通过setTime设置。
因为可以通过Date对象的方法对该日期中的各个字段(年月日等)进行操作。

日期对象–>毫秒值:
1. getTime方法。
因为可以通过具体的数值进行运算。

对日期对象进行格式化:
将日期对象–>日期格式的字符串。
使用的是DateFormat类中的format方法。

将日期格式的字符串–>日期对象。
使用的是DateFormat类中的prase方法。

public static void main(String[] args){
        Date date1 = new Date();
        System.out.println("date1 = "+date1);

        long time = System.currentTimeMillis();
        System.out.println("time = "+time);

        Date date2 = new Date(time);
        System.out.println("date2 "+date2);

        DateFormat df  = DateFormat.getDateInstance(DateFormat.FULL);
        System.out.println("DateFormat.FULL = "+df.format(date1));

        df = DateFormat.getDateInstance(DateFormat.LONG);
        System.out.println("DateFormat.LONG= "+df.format(date1));

        df = new SimpleDateFormat("yyyy--MM--dd");
        System.out.println("SimpleDateFormat ="+df.format(date1));
    }

这里写图片描述

calendar类

Calendar可以对年月日等时间进行获取。并提供了相应的子段值。可参阅API文档。
字段:
获取年份:Calendar.YEAR
获取月份:Calendar.MONTH
获取日期:Calendar.DAY_OF_MONTH
获取星期:Calendar.DAY_OF_WEEK
获取小时:Calendar.HOUR_OF_DAY
获取分钟:Calendar.MINUTE
获取秒数:Calendar.SECOND
方法:

1.void add(int field,int amount);//为给定的日历字段添加或减去指定的时间量
2.void set(int field,int value);//将给定日历字段对应的时间值设置为给定值
3. int get(int field);//获取指定的日历字段对应的时间值

    public static void main(String[] args) {
        Calendar calen = Calendar.getInstance();
        System.out.println("当前日期:" +calen);
        calen.set(Calendar.YEAR, 2013);
        System.out.println("修改后日期:"+calen);
        System.out.println("calen.get(Calendar.MARCH) = "+calen.get(Calendar.MARCH));
        String str = calen.get(Calendar.YEAR)+"年"+calen.get(Calendar.MONTH)+"月"
        +calen.get(Calendar.DAY_OF_MONTH)+"日"+calen.get(Calendar.HOUR_OF_DAY)+"时"+calen.get(Calendar.SECOND)+"分"
                +calen.get(Calendar.SECOND)+"秒";
        System.out.println("获取格式化时间:"+str);
    }

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值