您的位置:首页 > 编程语言 > Java开发

Thinking in java-31 容器-container

2017-06-27 10:38 253 查看

1. 容器

引入容器

一些简单的程序而言,有一些固定数量的对象、且这些对象有已知的生命周期就足够了。Java中有多种方式存储对象(或者换种说法,存储对象的引用)。数组array是编译器支持的数据类型,如果要存储一组基本数据类型对象,数组是一个极好的选择;对于存储一组对象而言数组也是很有效率的。

数组的局限性在于它是固定大小的,这个特点是致命的,因为绝大部分我们并不知道运行时需要有多少对象,所以容器大小无法改变这个特点有时太过于局限化。

容器分类

1). Collection;是一组单独的元素,有多个规则适用于这组容器。可以看作是key为int map。

2). Map:是一组key-value键值对对象,允许我们通过key查询value。

2. Comparable & Comparator 接口

package com.fqy.blog;

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

class Person implements Comparable {
private int height;

public Person(int height) {
this.height = height;
}

@Override
public String toString() {
return "Height is: " + height;
}

@Override
public int compareTo(Object o) {
Person p = (Person) o;
return (this.height - p.height > 0) ? 1 : (this.height - p.height == 0 ? 0 : -1);
}
}

public class ComparableDemo {
public static void main(String[] args) {
ArrayList<Person> list = new ArrayList<>();
list.add(new Person(165));
list.add(new Person(172));
list.add(new Person(162));
list.add(new Person(181));
list.add(new Person(159));

System.out.println(list);
Collections.sort(list);
System.out.println(list);
Collections.sort(list, Collections.reverseOrder());
System.out.println(list);

}
}
//Running result:
[Height is: 165, Height is: 172, Height is: 162, Height is: 181, Height is: 159]
[Height is: 159, Height is: 162, Height is: 165, Height is: 172, Height is: 181]
[Height is: 181, Height is: 172, Height is: 165, Height is: 162, Height is: 159]


Comparator Interface:

package com.fqy.blog;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;

class AbsComparator implements Comparator<Object> {
@Override
public int compare(Object o1, Object o2) {
int val1 = Math.abs(((Integer) o1).intValue());
int val2 = Math.abs(((Integer) o2).intValue());
return (val1 - val2) > 0 ? 1 : (val1 - val2 == 0 ? 0 : -1);
}
}

public class ComparatorDemo {

public static void main(String[] args) {
Random random = new Random();
Integer[] arr = new Integer[10];
for (int i = 0; i < arr.length; i++)
arr[i] = random.nextInt(100) * (random.nextBoolean() ? 1 : -1);

System.out.println("The original array is: ");
for (int val : arr)
System.out.print(val + " ");
System.out.println();

System.out.println("Use built-in method to sort: ");
Arrays.sort(arr);
for (int val : arr)
System.out.print(val + " ");
System.out.println();
Arrays.sort(arr, new AbsComparator());

// Collections.sort(Arrays.asList(arr), new AbsComparator());
Arrays.sort(arr, new AbsComparator());
System.out.println("Use altered method to sort: ");
for (int val : arr)
System.out.print(val + " ");
System.out.println();
}

}
//Running result:
The original array is:
68 32 -21 36 -45 50 82 59 71 -73
Use built-in method to sort:
-73 -45 -21 32 36 50 59 68 71 82
Use altered method to sort:
-21 32 36 -45 50 59 68 71 -73 82
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息