java集合 set list map

来源:互联网 发布:怎么在淘宝网上找货源 编辑:程序博客网 时间:2024/04/28 21:18
 

Java的集合分为三种
1、集合Set
   Set集合的元素不区分顺序,且不允许出现相同元素。这里同样的元素指的是以equals()方法判断的
2、列表List
   List列表中的记录元素添加的顺序,而且可以填充相同的元素。
3、映射Map
   映射中包含的都是“键(Key)-值(value)”对,且一个键对应一个值。所以键是不可以重复的。
注意:Java集合中只能存储引用类型的引用,且和数组一样集合存储的只是引用并非对象。

Set:
java.util.Collection是Set与List集合接口的根接口这个接口定义一个有关集合操作的普遍方法
例:Set<String> set=new HashSet<String>();
   boolean  add(Object o);   为容器添加一个元素
   boolean  remove(Object o);   移除一个元素
   int      size();    返回数组大小
   boolean  isEmpty();    判断集合是否为空不包含任何元素
   boolean  contains(Object o);   判断集合当中是否包含指定的元素
   void     clear();    清除所有
   Iterator iterator();    返回迭代器,通常是用来对多种容器的统一遍历
   Object[] toArray();    将集合转换为数组

List:
List接口规定使用者可以对列表元素的插入位置进行精确的控制,并添加了根据元素来访问集合某个指定的元素的功能
例:List<String> list=new Vector<String>();
   void     add(int index,Object element); 往指定位置添加或插入新元素
   Object   get(int index);   返回指定下标的元素
   Object   set(int index,Object element); 设定或修改指定位置的元素此方法没有插入功能
   int      indexOf(Object o);   获取指定元素在集合当中的下标,如果没有找到则返回一个负值,一般为-1
   Object   remove(int index);   移除下标指定的元素

Map:
java.util.Map描述了映射结构,Map结构允许以键集、值集合或键-值对映射关系集的形式来访问和查看某个映射的内容
例:Map<Integer,String> map=new Hashtable<Integer,String>();
   Object   put(Object key,Object value); 添加一个键-值对,如果key已经存在,则修改其对应的value
   Object   get(Object key);   获取key对应的value,如果key不存在则返回null
   boolean  isEmpty();    判断当前映射是否为空
   void     clear();    清除映射当中的全部内容
   int      szie();    返回当前映射中有多少对键值
   boolean  containsKey(Object key);  判断当前映射中是否存在指定的key
   boolean  containsValue(Object value); 判断当前映射中是否存在指定的value
   Set      keySet();    返回当前映射中所有的key集合
   Collection values();    返回当前映射中所有的value集合

ArrayList:
一、java.util.ArrayList描述了长度可变的数组列表
例:ArrayList list=new ArrayList();
二、其实ArrayList类内部维护的是一个一维数组,你可以利用ArrayList如果使用默认的构造函数,那么默认的输入大小为10,当我们往里添加的元素数量超过了内部维护的数组的大小,那么每一次的添加都会动态的产生一个一样大小的一维数组,然后在将进行数组拷贝工作。也就是说如果大量的使用自动增长的功能,效率是十分的低的!
我们可以利用public void ensureCapacity(int minCapacity)这个方法一次性扩充数组的长度,减少了不必要的反复赋值数组的浪费效率的操作!
三、ArrayList列表允许元素取值为null,public void trimToSize()可以将当前ArrayList的大小更改为实际存储元素的大小,由于ArrayList内部维护的数组,所有当进行从中间删除或插入对象的时候效率上是十分低的因此我们可以使用以链表形式实现的LinkedList。

LinkedList:
四、java.util.LinkedList以链表的形式实现了List接口,LinkedList加入了在进行插入与删除动作时有较好效果的方法:
例:LinkedList<String> linkedList=new LinkedList<String>();
    public void addFrist(E arg); 往链表头插入元素
    public void addLast(E arg);  往链表尾插入元素
    public E    getFrist();  获取链表首元素
    public E    getLast();  获取链表尾元素
    public E    removeFrist();  移除链表首元素,并返回移除的元素
    public E    removeLast();  移除链表尾元素,并返回移除的元素

Vector:
java.util.Vector也是描述一个可变长度的数组与ArrayList的差别:Vector是同步(线程安全的)多个线程同时操作同一个Vector,因此运行效率低,主要用于多线程的环境下,而ArrayList是不同的,适合在单线程环境下使用。
例:Vector list=new Vector();
常用方法(除实现List接口以外的方法):
public Object elementAt(int index);    返回指定下标的元素
public void   addElement(Object obj);    为容器添加一个元素,同add一样
public void   removeElementAt(int index);   删除指定下标的元素
public void   insertElementAt(Object obj,int index);  指定位置插入元素
public boolean removeElement(Object obj);   查找元素,并删除
public void removeAllElement();     删除所有元素
public Object[] toArray();     将容器转换为数组
注意:看完下面的例子后不难发现ArrayList和Vector的用法完全相同当我们运行的结果是一样,也就是我们不能从结果中看到区别,但是在多线程中Vector表现出更好的安全性……

Stack:
java.util.Stack类继承自Vector类,对应了数据结构中栈这种概念,实际上提供了一种后进先出的数据存储方式和操作数据的对象栈。
例:Stack<String> s=new Stack<String>();
Stack类提供了常规的栈操作方法:
public Stack();     创建一个无限的存储空间,这事理论上的
public Object  push(E item);   向栈内压入一个新的数据,返回当前压入的数据
public Object  pop();    从栈内弹出(删除)最后一个压入的数据,实现弹栈的操作,返回弹出(删除)的数据
public Object  peek();    查看并返回堆栈栈顶的数据(也就是我们最后一次压入栈内的数据),但并没有弹出它
public boolean  empty();   判断栈是否为空
public void  clear();   清空栈
public int  search(Object o);  查找指定元素在栈中的索引,注意此索引由1开始,而且返回的索引时从栈顶向下计算的

Iterator:
java.util.Iterator接口描述的是以统一方式对各种集合元素进行遍历/迭代的工具,也称“迭代器”,Iterator允许当前遍历到的元素进行移除和其他操作
例:ArrayList<String> Array=new ArrayList<String>();
Iteratoc<String> it=Array.iterator();
方法:
boolean hasNext();  判断是否还有下一个元素
Object  next();   返回下一个元素的引用
void    remove();  移除当前遍历到的元素

TreeSet:
例:
TreeSet<String> set=new TreeSet<String>();
java.util.TreeSet类继承自Set接口与java.util.SortedSet接口,TreeSet也是JavaSE中唯一实现了SortedSet接口的类。它描述了一种可以排序的集合,在将对象元素添加到TreeSet集合中时会自动按照某种比较规则将其插入到有序的对象序列中,以保证TreeSet集合元素组成的对象序列时刻按照“升序”排列,默认的排序规则是对象的哈希码进行排序,如果对象有自己的一套排列顺序,要定义一个实现了。
java.util.Comparator接口的对象,并实现接口中的compare()且compare()必须返回int。

HashMap:
例:
HashMap<Integer,String> hm=new HashMap<Integer,String>();
一、java.util.HashMap类实现了java.util.Map接口,该类基于哈希表实现了前述的映射集合结构。
二、HashMap结构不保证其中元素(映射信息)的先后顺序,并且允许使用null值与null键
三、当集合中不存在当前检索的key所对应的映射值时,HashMap的get()方法会返回空值null,而不会运行出错。
四、影响HashMap的性能的链各个参数:初始容量(Initial Capacity)
加载因子(Load Factor)

HashSet:
一、java.util.HashSet类实现了Set接口,描述典型的Set集合结构,主要用于快速查找。
二、HashSet同样不允许出现重复的元素,不保证集合元素的顺序。
三、HashSet的排序规则为哈希码法。
如果用迭代器来遍历容器当中的元素,且想按照加入顺序排列,则可以使用LinkedHashList容器。
四、HashSet中对象的比较顺序为,先判断hashCode()方法返回的值是否相同,在使用equals()方法比较。当两个方法都为true的时候才认定两个为相同对象。
HashSet中只允许包含一个null元素。

HashSet          主要用于快速查找,同样不允许出现重复的元素,不保证集合元素的顺序,只允许包含一个null元素。
TreeSet   按照“升序”进行排列
linkedHashSet    按照加入顺序进行排列

Hashtable:
一、java.util.Hashtable与HashMap作用基本相同,也实现了Map接口,采用哈希表的方式将key映射对应的value。
二、Hashtable与HashMap的差别:
1、Hashtable中元素的key和value均不允许为null,而HashMap中则允许
2、Hashtable是同步的,即线程安全,效率相对要低一些。适合在多线程环境下使用,而HashMap是不同步的,效率相对高一些,适合单线程环境下使用。
三、Hashtable与HashMap的使用格式完全相同。

Enumeration:
一、java.util.Enumeration接口作用与Iterator接口类似,但只提供了遍历Vector和Hashtable(及其子类Properties)类型集合元素的功能,而且不支持集合元素的移除操作
二、方法:
boolean hasMoreElements() 判断是否还有元素
E nextElement()  获取元素

Collections:
java.util.Collections对象中定义了多种集合操作方法,实现了对集合元素的排序、取值、批量拷贝、集合结构转换、循环移位以及匹配性检查等功能
常用方法:
public static void  sort(List list);    将List升序排列
public static void  reverse(List list);    翻转List中所有元素的顺序
public static void  shuffle(List list);    将List中元素的顺序打乱
public static void  copy(List dest,List src);   List的复制,目标List实际元素数量必须比List大,且复制到目标数组的起始位置
public static ArrayList list(Enumeration e);    将实现了Enumeration接口的类对象转换为ArrayList
public static int   frequency(Collection c,Object o);  获取参数2,Object o在容器中出现的次数
public static T     max(Collection coll);    获取最大元素
public static T    min(Collection coll);    获取最小元素
public static void  retate(List list,int distance);      将容器中的元素向后移distance位

Arrays:
一、java.util.Arrays对象定义了多种数组操作方法,实现了对数组元素的排序、填充、转换为列表或字符串形式、增强的检索和深度比较等功能。
二、主要方法:
public static List asList(<T>[] a);   将数组转换为List列表
public static void sort(<T>[] a);   数组元素的升序排列
public static int  binarySearch(<T>[] a,<T> key); 获取key元素在数组中的下标
public static String toString(<T>[] a);   将整个数组所有的元素连接为一个字符串返回

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米手机拔号黑屏怎么办 小米手机进水黑屏了怎么办 小米6手机黑屏打不开怎么办 小米手机王者荣耀黑屏怎么办 小米5c手机黑屏怎么办 小米2s开机闪退怎么办 小米手机打不开机怎么办 苹果手机打电话闪退怎么办 红米手机通话时黑屏怎么办 小米手机通话时是黑屏怎么办? 华为手机通话时出现黑屏怎么办 微信屏幕变黑了怎么办 乐视手机打不开机怎么办 金立手机屏幕不亮怎么办 笔记本开不了机怎么办屏幕黑屏 红米4刷机失败怎么办 红米手机开不了机怎么办 红米not开不了机怎么办 红米2开不起机怎么办 小米手机免提声音小怎么办 红米手机1s黑屏怎么办 红米2完全黑屏怎么办 红米note3接电话黑屏怎么办 红米note3死机黑屏怎么办 红米note2开机之后黑屏怎么办 红米手机白屏怎么办 红米4黑屏打不开怎么办 oppo手机拨打电话时黑屏怎么办 华为手机拨打电话时黑屏怎么办 小米6x拨电话黑屏怎么办 魅族手机打电话黑屏怎么办 三星手机拨打电话时黑屏怎么办 华为畅享5打电话黑屏怎么办 小米note通话声音小怎么办 金立m5黑屏开不了机怎么办 金立手机光感器坏了怎么办 红掌根部烂了怎么办 魅族相册闪退怎么办 魅族手机闪退怎么办 苹果6手机主页面打不开怎么办 手机中病毒闪退怎么办