集合

集合:存储对象的容器

集合的出现就是为了持有对象。集合中可以存储任意类型的对象而且长度可变

 

集合和数组的区别:

数组和集合类都是容器

数组长度是固定的,集合长度是可变的。

数组中可以存储基本数据类型,集合只能存储对象,

数组中存储数据类型是单一的,集合中可以存储任意类型的对象。

 

集合框架:

 

什么时候该使用什么样的集合:

 

Iterable:Collection的父接口实现了Iterable的类就是可迭代的

迭代器:

为了方便的处理集合中的元素,Java中出现了一个对象,该对象提供了一些方法专门处理集合中的元素.例如删除和获取集合中的元素.该对象就叫做迭代器(Iterator)

如何获取迭代器?

Collection接口中定义了获取集合类迭代器的方法(iterator())。

//迭代器遍历:(while)
public static void main(String[] args) {
        ArrayList list = new ArrayList();
        // 增加:add() 将指定对象存储到容器中
        list.add("计算机网络");
        list.add("现代操作系统");
        list.add("java编程思想");
        list.add("java核心技术");
        list.add("java语言程序设计");
        System.out.println(list);
        Iterator it = list.iterator();
        while (it.hasNext()) {
            String next = (String) it.next();
            System.out.println(next);
        }
    }

 

//for循环
import java.util.ArrayList;
import java.util.Iterator;

public class Demo2 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        // 增加:add() 将指定对象存储到容器中
        list.add("计算机网络");
        list.add("现代操作系统");
        list.add("java编程思想");
        list.add("java核心技术");
        list.add("java语言程序设计");
        System.out.println(list);

        for (Iterator it = list.iterator(); it.hasNext();) {
             //迭代器的next方法返回值类型是Object,所以要记得类型转换。
            String next = (String) it.next();
            System.out.println(next);
        }
    }
}

 

 

Map:

Map中的元素是两个对象,一个对象作为键,一个对象作为值。键不可以重复,但是值可以重复。

Map与Collection在集合框架中属并列存在

Map存储的是键值对

Map存储元素使用put方法,Collection使用add方法

Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素

Map集合中键要保证唯一性

 

Collections与Arrays

(Collections)集合框架中的工具类,特点:该工具类中的方法都是静态的。

Collections:常见方法:

1, 对list进行二分查找:

前提该集合一定要有序。

int binarySearch(list,key);

//必须根据元素自然顺序对列表进行升级排序

//要求list 集合中的元素都是Comparable 的子类。

int binarySearch(list,key,Comparator);

2,对list集合进行排序。

sort(list); 

//list进行排序,其实使用的事list容器中的对象的compareTo方法

sort(list,comaprator);

//按照指定比较器进行排序

3,对集合取最大值或者最小值。

max(Collection)

max(Collection,comparator)

min(Collection)

min(Collection,comparator)
4,对list集合进行反转。

reverse(list);

5,对比较方式进行强行逆转。

Comparator reverseOrder();

Comparator reverseOrder(Comparator);

6,对list集合中的元素进行位置的置换。

swap(list,x,y);

7,对list集合进行元素的替换。如果被替换的元素不存在,那么原集合不变。

replaceAll(list,old,new);

8,可以将不同步的集合变成同步的集合。

Set synchronizedSet(Set<T> s)

Map synchronizedMap(Map<K,V> m)

List synchronizedList(List<T> list)

9. 如果想要将集合变数组:

可以使用Collection 中的toArray 方法。注意:是Collection不是Collections工具类

传入指定的类型数组即可,该数组的长度最好为集合的size。

 

Arrays:用于对数组操作的工具

1二分查找,数组需要有序

binarySearch(int[])

binarySearch(double[])

2数组排序

sort(int[])

sort(char[])……

1, 将数组变成字符串。

 toString(int[])

2, 复制数组。
 copyOf();

3, 复制部分数组。

copyOfRange():

4, 比较两个数组是否相同。

equals(int[],int[]);

5, 将数组变成集合。

List asList(T[]);

这样可以通过集合的操作来操作数组中元素,

但是不可以使用增删方法,addremove。因为数组长度是固定的,会出现

UnsupportOperationExcetion

可以使用的方法:containsindexOf。。。

如果数组中存入的基本数据类型,那么asList会将数组实体作为集合中的元素。

如果数组中的存入的引用数据类型,那么asList会将数组中的元素作为集合中

的元素。

 

泛型:

集合类<类类型>  变量名  = new  集合类<类类型>();

public class Demo5 {
    public static void main(String[] args) {
        // 使用泛型后,规定该集合只能放羊,老虎就进不来了.
        ArrayList<Sheep> arr = new ArrayList<Sheep>();
        arr.add(new Sheep("美羊羊"));
        arr.add(new Sheep("懒洋洋"));
        arr.add(new Sheep("喜羊羊"));
        // 编译失败
        // arr.add(new Tiger("东北虎"));
        System.out.println(arr);
        Iterator<Sheep> it = arr.iterator();
        while (it.hasNext()) {
            // 使用泛型后,不需要强制类型转换了
            Sheep next = it.next();
            next.eat();
        }

    }
}

class Tiger {
    String name;

    public Tiger() {

    }

    public Tiger(String name) {
        this.name = name;
    }

    @Override
    public String toString() {

        return "Tiger@name:" + this.name;
    }

    public void eat() {
        System.out.println(this.name + "吃羊");
    }
}

class Sheep {
    String name;

    public Sheep() {

    }

    public Sheep(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Sheep@name:" + this.name;
    }

    public void eat() {
        System.out.println(this.name + "吃青草");
    }
}

 

什么时候使用泛型:当类中操作的引用数据类型不确定的时候,就可以使用泛型类.

 

posted @ 2016-03-01 19:31  Hsinwang  阅读(181)  评论(0编辑  收藏  举报