Java集合详解

来源:互联网 发布:淘宝女装销量 编辑:程序博客网 时间:2024/04/30 21:44

集合就是将若干用途、性质相同或相似的对象而组合成一个整体。

集合类型:

集(Set):Set集合不区分元素的顺序,不允许出现重复的元素。

列表(List):List集合区分元素的顺序,且允许包含重复的元素。

映射(Map):映射中保存对的"键-值(key-value)"信息,映射中不能包含重复的键,每个键最多只能映射一个值。


集合的依赖关系:


Collection接口定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。

Set中的数据对象没有顺序且不可以重复。

List中的数据对象又顺序且可以重复。

注:从源代码中我们可以发现,Set的内部用的也是Map,只不过用的只是Map中的Key而已,没有用Value!


Collection接口中的方法:

//返回collection中的元素个数。int size()//判断集合是否为空。boolean isEmpty()//判断c所指向集合中所有的元素是不是已经全部包含在当前boolean containsAll(Collection c)集合中了。//返回能够遍历当前ijhe所有元素的迭代器(这个方法在后续会着重强调)。Iterator iterator()//容器不是数组,不能通过下标的方式来访问容器中的元素,可以利用这个方法将容器中的元素以数组的形式返回,然后通过下标的形式来获取。Object[] toArray()//把e 添加到当前集合中。boolean add(Object e)//把对象o从当前集合中删除。boolean remove(Object o)//把c中所有的元素添加到当前集合中。boolean addAll(Collection c)//删除当前集合中所有的元素。boolean remove(Collection c)//把当前容器中的所有元素清除。void clear()


Collection接口的子接口——>List接口

1:List接口是Collection的子接口,实现List接口容器类中的元素是有序的,而且是可以重复的。

2:List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

3:List容器类的实现类有ArrayList和LinkedList等。

方法:

//根据序号取出对象。Object get(int index)//根据序号设置元素对象。Object set(int index,Object e)//把元素添加到集合的某个位置。void add(int index,Object e)//根据序号删除对应的元素。Object remove(int index)//获取元素的序号。int indexOf(Object o)//获取元素的序号,当存在多个相同对象时,返回最后一次出现的序号。int lastIndexOf(Object o)



ArrayList和LinkedList类的区别:

1:ArrayList底层采用的数组完成,而LinkedList则是以一般的双向链表(double-linked list)完成,后一个元素。其内部除了本身外还有两个引用,分别指向前一个元素和后一个元素

2:如果我们经常在List的开始出增加元素,或者在List中进行插入和删除操作,我们应该使用LinkedList,否则使用ArrayList更好。

3:ArrayList的存取速度更快,插入删除速度较慢;LinkedList存取速度较慢,但插入删除速度较快。


Collection接口的子接口——>Set接口

Set容器中存放的是无序的且不重复的元素,所以那些和序号相关的方法,在Set中都是没有的,比如说Set中没set(int index,Object e)方法和indexOf(Object e)方法,因为在Set集合中压根就没有序号这个概念。

Set接口有TreeSet和HashSet两个重要实现类。


TreeSet和HashSet类的区别:

1:TreeSet是一个有序的集合,TreeSet中元素将按照升序排列,缺省是按照自然顺序进行排列,因此TreeSet中元素要实现Comparable几口。

2:HashSet是基于Hash算法实现的,其性能通常都优于TreeSet,所以通常我们都是用HashSet,在我们需要排序功能时,我们才使用TreeSet类。



Collections类

注意看清楚这是Collections类,跟前面那个Collections接口不要混淆了,Collections类是Collection接口的实现类,由于ArrayList和LinkedList本身并没有提供排序、倒置、查找等方法,Collections这个类的出现就是为了解决这个问题,这个类提供了很多公有的静态方法可以直接对Collection接口的实现类进行操作。


常用方法:

//对List容器内的元素进行排序。void sort(List)//对List容器内的元素进行随机排列(麻将洗牌)。void shuffle(List)//对List容器内的元素进行逆序排列。void reverse(List)//用一个特定的对象重写整个List容器。void fill(List,Object)//将src 的List拷贝到dest的List中。void copy(List dest,List src)//对于顺序的List容器,采用折半查找的方法查找特定的对象。int binarySearch(List,Object)

注:这些方法都是静态的,所以可以直接通过Collections.XXX()的形式进行调用!!!



下面通过一些例子来解释上述诸多理论

demo1:

/** * 我写这个程序的目的是说明所有被添加打集合中的元素都是对象 * 比如list.add(8);会通过自动装箱功能,将8转换为Integer类型 * 88.8会自动装箱成为Double类型 * list.add(null);我就是为了说明list集合中可以存放null值 * @author Liao * */public class ListTest {public static void main(String[] args) {/*创建一个List集合*/List list = new ArrayList();/*往List集合中添加数据*/list.add(8);list.add("习近平");list.add(88.8);list.add(null);System.out.println(list);}}


demo2:

/** * 这个类主要就是想要说明List集合的使用及List中相关 * 方法的使用 * @author Liao * */class Student {private Integer sid;private String sname;public Student() {}public Student(Integer sid, String sname) {this.sid = sid;this.sname = sname;}public Integer getSid() {return sid;}public void setSid(Integer sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}@Overridepublic String toString() {return "Student [sid=" + sid + ", sname=" + sname + "]";}}public class ArrayListTest {public static void main(String[] args) {/* 创建一个list集合 */List students = new ArrayList();/* 添加学生 */students.add(new Student(1, "习近平"));students.add(new Student(1, "习近平"));students.add(new Student(2, "李克强"));Student stud = new Student(3, "廖泽民");students.add(stud);/*.get(2)表示获取序号为2的学生*/System.out.println(students.get(2));/*.lastIndexOf(stud)表示最后一次出现stud对象的位置*/System.out.println(students.lastIndexOf(stud));}}

demo3:

/** * 这个类我要说明的是Collections类及其相关方法的使用 * @author Liao * */public class CollectionsTest {public static void main(String[] args) {// TODO Auto-generated method stub/* 创建一个list集合 */List list = new ArrayList();/* 添加学生 */list.add(1);list.add(1);list.add(2);list.add(3);/*使用Collectio *  * ns.sort()方法来对集合进行排序*/Collections.sort(list);System.out.println(list);/*使用Collections.reverse()方法来对集合进行倒置*/Collections.reverse(list);System.out.println(list);/*使用Collections.shffle()方法来对集合进行乱序排列*/Collections.shuffle(list);System.out.println(list);/*使用Collections.fill()方法来填充集合*/Collections.fill(list, "廖钟民");System.out.println(list);}}



0 0
原创粉丝点击