黑马程序员----集合

来源:互联网 发布:淘宝详情页多大尺寸 编辑:程序博客网 时间:2024/06/06 02:26

------- android培训、java培训、期待与您交流! ----------

 

 

黑马程序员----集合:

集合用来存储引用数据类型,长度可变化,类型也可变,因此事存储并操作对象的一种更有效的方式。

数组也可以用来存储基本数据类型和引用数据类型,可是数组长度的不可变性限制了对数组的操作。

因此集合用于存储不同类型的对象,长度可变;数组可以存储任意类型而长度不可变。

 

集合框架

 

派生出来的两个Java集合类:

Collection                                       Map

List   :元素有序,可存放重复对象,有索引

Set    :元素是无序的,不能重复,无索引

 

Collection提供的方法:作为父类,子类继承了父类的方法。

改:

boolean add(Object o):向集合添加一个元素。

boolean addAll(Collection c);向集合添加集合。

       Eg:New List().add(“新加入元素”);

 

void clear():清除集合里面的全部元素。

       Eg:list1.clear();

 

boolean remove(Object o):删除集合中特定元素o。

boolean removeAll(Collectionc):从集合中删除集合c里面的元素。

boolean retainAll(Collectionc):从集合中删除集合c里不包含的元素。

Object[] toArray():把集合转成一个数组。

 

查:

boolean contains(Object o):判断集合里是否包含特定的元素。

booleancontainsAll(Collection c):判断集合里是否包含集合c内全部的元素。

boolean isEmpty():判断集合是否为空。

int size():获得集合元素的个数。

 

取:

Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素,被称为迭代器。

    迭代器接口具有的方法:

       booleanhasNext():判断是否还有元素。

Object  next():获得下一个元素。

void remove():删除集合上一次next()方法返回的元素。

 

Eg:   Iteratorit = list1.Iterator();

       while(it.hasNext())

       System.out.println(it.next());

 

List:区别于其他集合,List有索引,可以通过操作角标操作元素。判断(contains和remove)内部是否有相同元素时使用的是元素本身的equals方法。可以通过重写的equals方法改变判断的方式。

 

ArrayList:底层数据结构是数组结构,因此查询速度块。线程不同步。

LinkedList:链表数据结构。因此增删很快。线程不同步。

Vector:底层是数组数据结构。线程同步

 

增:

Add(index,element):在index添加元素,其他元素按顺序后移。

addAll(index,Collection):添加集合。

删:

Remove(index):删除特定位置的元素。

改:

Get(index,element);改变特定位置上的元素。

查:

Get(index):获取特定位置index的元素。

subList(from,to):从开始和结束位置获取部分元素。

indexOf(ele):获取特定元素的位置。

取:

listIterator():list特有的列表迭代器,可以添加,修改内部元素。

列表迭代器接口特有的方法:

hasPrevious,判断前面是否还有元素。

previous返回上一个元素。

 

LinkedList特有方法有:

增:

offerFirst():从前面增加元素进入链表。

offerLast():从后面增加元素进入链表。

 

取:

peekFirst():获取第一个元素,不删除元素。

peekLast():获取最后一个元素,不删除元素。

pollFirst():获取第一个元素,删除元素。

pollLast():获取最后一个元素,删除元素。

 

Eg:

public static voidmain(String[] args)

{  

    ArrayList al = new ArrayList();

    al.add(“第1个元素”);

    al.add(“第2个元素”);

    al.add(“第3个元素”);

    al.remove(2);

    System.out.println(al);

}

 

SET:元素存取无序且不可以重复。具有的方法和父类一致。

HashSet:(数据结构是哈希表)查询速度快。线程不安全。判断元素是否相同的依据为:hashCode(先判断)和equals(后判断)来完成。在开发的时候一般都会复写equals和hashcode方法。

 

TreeSet:(二叉树)是SortedSet接口实现唯一的类。可以对Set集合中的元素依据:元素通过实现Comparable接口并重写compareTo  的方法提供排序依据;让set集合实现实现Comparator接口并覆盖compare方法提供的排序依据。

 

Eg1:

public int compareTo(Objectobj)

{

if(this.num>obj.num)

return 1;

return -1;

}

 

Eg2:

//在创建TreeSet集合对象时,提供一个Comparator对象负责元素的排序。Set<Student1> s =new TreeSet(new Comparator()

{

   

    @Override

    public intcompare(Object o1, Object o2)

{

       if(o1instanceof Student1 & o2 instanceof Student1)

{

           Student1s1 = (Student1)o1;

           Student1s2 = (Student1)o2;

           if(s1.getAge() > s2.getAge())

{

              return -1;

              }

else if(s1.getAge() <s2.getAge())

{

              return 1;

              }

           }

       return 0;

    }

});

 

Map:Map集合里存在key和映射的value值,其中Map里的key不可重复,那么通过key可以找到唯一的value。Key与value的关系存在于Map接口的内部接口Map.Entry中。

 

HashTable:哈希列表,线程同步,不可存unll;

HashMap:哈希列表,线程不同步,可存unll;

TreeMap:二叉树,线程不同步,可按标准排序。

 

其中Map的常见方法有:

增:

Object put(Object key,Objectvalue):添加一个新的key-value对,已有的会覆盖原来。

void putAll(Map m):增加m中的key-value到调用者集合中去。

Eg:

Map m = new HashMap();

m.put(1, new persong(“jack”));

 

删:

void clear():删除所有的key-value。

Object remove(Object key):删除指定key所对应的key-value对。

查:

boolean containsKey(Objectkey):查询Map中是否包含特定的key。

boolean containsValue(Object  value):查询Map中是否有值;

boolean isEmpty():判断Map集合是否为空;

int size():返回该Map里面key-value对的个数;

取:

Object get(Object key):返回指定key所对应的value,若此Map中不包含该key,返回null;

Collection values():返回Map里所有value组成的Collection。

 

Eg:

Collection c = m.values();

Set entrySet():返回Map所包含的key-value对所组成的Set集合,其中每个集合元素都是Map.Entry对象。

    Entry是Map接口里面的一个内部接口,用于封装key- value,帮助遍历Map集合,提供3个方法:

Object getKey():返回Entry里包含的key值

Object getValue():返回Entry里包含的value值

Object setValue(Object value):设置Entry里包含的value值,并返回新设置的value值;

 

Eg:

Map<Integer, String> m = newHashMap<Integer, String>();

    Set s =m.entrySet();

    Iterator it= s.iterator();

    while(it.hasNext())

{

    Map.Entryme = (Entry) it.next();

    System.out.println(me.getKey()+""+me.getValue());

    }

Set keySet():返回该Map中所有key所组成的Set集合,遍历Map的第二种方式。

Eg:

s = m.keySet();

it = s.iterator();

while(it.hasNext())

{

    int i = (int)it.next();

    System.out.println(i+""+m.get(i));

}

 

 

如果把集合视作对象,那么操作集合的类就是:

Collections类:

具有的全部静态方法有:

改:

static void reverse(List list):反转List集合元素的顺序。

static void shuffle(Listlist):对集合内部元素按照随机进行排序。

static void sort(List list):自然排序

static boolean  replaceAll(List list, Object oldVal, ObjectnewVal)  使用另一个元素替换所有某一个指定的元素。

static vois swap(Listlist,int i, int j):交换List集合i处元素和j处元素。

static void rotate(List list,int distance):

    若distance为正数,将list集合后的distance个元素移到前面。

    当distance为负数,将list集合前的distance个元素移到后面。

 

static void fill(List list,Object obj) :使用指定元素替换所有元素。

 

取:

static int binarySearch(Listlist, Object key) 用二分搜索法搜索list,以获得key。注意子啊调用前要对list进行自然排序。

static Object max(Collectioncoll):获得最大元素。  

static Object min(Collectioncoll):获得最小元素。     

static intfrequency(Collection c, Object o) :获得特定对象的元素数。

static intindexOfSubList(Listsource, List target) 获得源集合中中第一次出现的指定目标列表的起始位置,若无返-1。

static intlastIndexOfSubList(List source, List target) 获得最后一次起始位置若无返-1。

toArray():将集合变为 数组以限制对集合长度的改变操作。

 

Arrays:

用于操作数组的工具类。

AsList(arr):将arr数组变为集合,改变后只可操作内部元素,不可改变长度。

 

 

 


 

0 0
原创粉丝点击