java集合类总结


Collection:单列集合类的跟接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别时List和Set还有Queue。其中List的特点时元素有序,元素可重复,Set的特点时元素无序且不可重复,Queue与List性质一样,不同之处时Queue是先进先出。

Map:键值对存储,每个值对应一个键,是一种映射关系,在Map集合中可以通过键值Key找到对应的值Value

List接口

方法声明

功能描述

Void add(int  index,Object element)

将元素element元素插入在List集合的index处

Boolean addAll(int index,Collection c)

将集合c所包含的所有元素插入到List集合的index处的元素

Object get(int index)

返回集合索引index处的元素

Object remove(int index)

删除index索引处的元素

Object set(int index,Object element)

将索引index处元素替换成element对象,并将替换后的元素返回

Int indexOf(Object o)

返回对象o在List集合中出现的位置索引

Int lastIndexOf(Object o)

返回对象o在List集合中最后一次出现的位置索引

List subList(int fromIndex,int toIndex)

返回从索引fromIndex(包括)到toIndex(不包括)处所有元素集合组成的子集合

 

ArrayList集合

 

ArrayList常见功能

添加
public boolean add(E e)
public void add(int index,E element) // 在指定的索引位置添加元素 

获取元素
public E get(int index)// 根据索引值获取元素


获取元素个数
public int size() //获取元素个数

删除元素
public boolean remove(Object o) // 直接删除元素 
public E remove(int index) //根据索引删除元素 ,并把删除的元素返回 

修改元素
public E set(int index,E element)// 使用element 去替换指定索引的元素 , 并返回被替换的元素

package com.ajax;

import java.util.ArrayList;

public class Example10 {
	public static void main(String[] args){
		ArrayList list1=new ArrayList();
		list1.add("1");
		list1.add("2");
		list1.add("3");
		list1.add("4");
		list1.add("5");
		for(Object obj:list1){
			System.out.println(obj);
		}
	}
}
 

LInkedList集合

查询快,增删慢

package com.ajax;

import java.util.ArrayList;
import java.util.LinkedList;

public class Example10 {
	public static void main(String[] args){
		LinkedList link=new LinkedList();
		link.add("1");
		link.add("2");
		link.add("3");
		link.add("4");
		link.add("5");
		System.out.println(link.toString());
		Object st= link.getFirst();
		System.out.println(st);
	}
}

 

 

 

Iterator接口

 

Iterator接口也是Java集合框架的成员,但它与Collection系列、Map系列的集合不一样:Collection系列集合、Map系列集合主要用于盛装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。

  Iterator接口里定义了如下4个方法:

    –booleanhasNext():如果被迭代的集合还元素没有被遍历,则返回true。

    –Objectnext():返回集合里下一个元素。

    –voidremove() :删除集合里上一次next方法返回的元素

    –voidforEachRemaining(Consumer action),这是Java 8为Iterator新增的默认方法,该方法可使用Lambda表达式来遍历集合元素。

package com.ajax;
import java.util.ArrayList;
importjava.util.Iterator;
importjava.util.LinkedList;
 
public classExample10 {
         public static void main(String[] args){
                  LinkedList link=newLinkedList();
                  link.add("1");
                  link.add("2");
                  link.add("3");
                  link.add("4");
                  link.add("5");
                  Iterator it = link.iterator();
                  while(it.hasNext()){
                          System.out.println(it.next());
                  }
                  }
}
 


 

 

Foreach循环

 

for(容器中元素类型 临时变量:容器变量)

package com.ajax;
 
importjava.util.ArrayList;
 
public classExample10 {
         public static void main(String[] args){
                  ArrayList list1=newArrayList();
                  list1.add("1");
                  list1.add("2");
                  list1.add("3");
                  list1.add("4");
                  list1.add("5");
                  for(Object obj:list1){
                          System.out.println(obj);
                  }
         }
}


 

 

ListIterator接口

 

为了迭代方式的多元化,在父类的基础上郑家了一下特有的方法

方法声明        功能描述

void add(Object o)  插入

ObjecthasPrevious()       判断对象是否有上个元素

void remove() 删除next或者previous返回的最后一个元素

package com.ajax;

 

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;
 
public classExample10 {
         public static void main(String[] args){
                  ArrayList link=newArrayList();
                  link.add("1");
                  link.add("2");
                  link.add("3");
                  link.add("4");
                  link.add("5");
                  ListIterator it=link.listIterator(link.size());
                  while(it.hasPrevious()){
                          System.out.println(it.previous());
                  }
                  }
}


 

//本例表示以集合的最后一个元素开始迭代

 

Enumeration接口

 

遍历Vector集合,Vector集合是线程安全的,而ArrayList集合是线程不安全的。

package com.ajax;

 

importjava.util.ArrayList;

importjava.util.Enumeration;

importjava.util.Iterator;

importjava.util.LinkedList;

importjava.util.ListIterator;

importjava.util.Vector;

 

public classExample10 {

         public static void main(String[] args){

                  Vector link=new Vector();

                  link.add("1");

                  link.add("2");

                  link.add("3");

                  link.add("4");

                  link.add("5");

                  Enumeration it=link.elements();

                  while(it.hasMoreElements()){

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

                  }

                  }

}

 

 

 

Set接口

 

Set接口和List接口一样,同样继承Collection接口,并没有对接口进行功能上的补充,只是比该接口更加严格了,Set无序没有重复

HashSet集合

 

当该集合添加一个对象时,首先会调用对象的hashCode()方法来确定与元素的存储位置,然后再调用对象的equals()方法来确保该位置没有出现重复元素,可以理解为像数据结构中的哈希散列表

package com.ajax;

 

importjava.util.ArrayList;

importjava.util.Enumeration;

importjava.util.HashSet;

importjava.util.Iterator;

importjava.util.LinkedList;

importjava.util.ListIterator;

importjava.util.Vector;

 

public classExample10 {

         public static void main(String[] args){

                  HashSet link=new HashSet();

                  link.add("1");

                  link.add("2");

                  link.add("3");

                  link.add("4");

                  link.add("1");

                  Iterator it=link.iterator();

                  while(it.hasNext()){

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

                  }

                  }

}

 

 

//结果

3 2 1 5 4

没有出现重复值,之所以出现的顺序时无序因为此处的哈希散列表是根据对象的地址来存储的,地址越靠前优先输出

TreeSet集合

 

原理是自平衡的排序二叉树,特点是存储的元素会按照大小排序,并能去重(平衡二叉树的左孩子必须小于根节点,右孩子大于根节点的值,当出现重复的元素时不做处理,树的结构不会放生变化,因为节点中已经出现该值)。

package com.ajax;

 

importjava.util.ArrayList;

importjava.util.Enumeration;

importjava.util.HashSet;

importjava.util.Iterator;

importjava.util.LinkedList;

importjava.util.ListIterator;

importjava.util.TreeSet;

importjava.util.Vector;

 

public classExample10 {

         public static void main(String[] args){

                  TreeSet link=new TreeSet();

                  link.add("1");

                  link.add("2");

                  link.add("3");

                  link.add("4");

                  link.add("1");

                  Iterator it=link.iterator();

                  while(it.hasNext()){

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

                  }

                  }

}

 

 

//结果:1234 根据平衡二叉树的原理,中序遍历的结果得出1234

Map接口

 

 

Map接口利用键值对的方式保存数据,其实现原理就是红黑树,红黑树是二叉查找树,如果读者想具体了解红黑树可以参考:http://blog.csdn.net/eric491179912/article/details/6179908写的很详细

常用的方法

方法声明                    功能描述

void put(Objectkey,Object calue) 将指定的值与此映射的值相关联(可选操作)

Object get(Objectkey)   通过key返回值,没有返回null

boolean containsKey(ObjectKey) 如果有映射关系返回true

booleancontainsValue(Object  value)         同上

 

HashMap集合

 

package com.ajax;

 

importjava.util.*;

 

public classExample10 {

         public static void main(String[] args){

                  Map link=new HashMap();

                  link.put(1, 'a');

                  link.put(3, 'c');

                  link.put(2, 'b');

                  link.put(5, 'd');

                  link.put(4, 'd');

                  link.put(4, 'e');

                  link.put(4, 'f');

                  Set keySet=link.keySet();//获取键的集合

                  Iterator it=keySet.iterator();

                  while(it.hasNext()){

                          Object key=it.next();

                          System.out.println("key:"+key+"value:"+link.get(key));

                  }

         }

}

 

 

//结果:

key:1value:a

key:2value:b

key:3value:c

key:4value:f

key:5value:d

通过测试可以发现,当键相同的元素存入map集合中的时候,每次保存的值都会发生改变直到最后一个存储的值为止

TreeMap集合

 

自平衡二叉树排序

package com.ajax;

 

importjava.util.*;

 

public classExample10 {

         public static void main(String[] args){

                  Map link=new TreeMap();

                  link.put(1, 'a');

                  link.put(4, 'd');

                  link.put(2, 'b');

                  link.put(5, 'd');

                  link.put(3, 'c');

                  Set keySet=link.keySet();//获取键的集合

                  Iterator it=keySet.iterator();

                  while(it.hasNext()){

                          Object key=it.next();

                          System.out.println("key:"+key+"value:"+link.get(key));

                  }

         }

}

 

 

 

Properties集合

 

map接口还有一个实现类Hashtable,它和HashMap十分相似,区别在于Hashstable是线程安全(线程安全不理解的参考:https://zhidao.baidu.com/question/168637634.html)的。

Hashtable存取元素的速度很慢目前基本被HashMap取代,但Hashtable有一个子类Properties主要用来存储字符串类型的键值对,开发中经常存取应用的配置项。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值