背景:
因为对Java的集合完全不了解,所以才在网上找了找能形成初步印象的文章进行学习,大多涉及的是一些概念和基础知识。
一、数组array和集合的区别:
(1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)
(2)JAVA集合可以存储和操作数目不固定的一组数据。
(3)若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。联系:使用相应的toArray()和Arrays.asList()方法可以互相转换。
二、集合的体系结构:
(1)List、Set、Map是这个集合体系中最主要的三个接口。 List和Set继承自Collection接口。 Map也属于集合系统,但和Collection接口不同。
(2)List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。 ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的。
(3)Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。Set 只能通过游标来取值,并且值是不能重复的。
(4)Map 是键值对集合。其中key列就是一个集合,key不能重复,但是value可以重复。 HashMap、TreeMap和Hashtable是Map的三个主要的实现类。 HashTable 是线程安全的,不能存储 null 值 HashMap 不是线程安全的,可以存储 null 值。
三、各个接口实现类的插入和遍历数据的方法
(1)List接口之ArrayList实现类
package com.test.List; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ListTest { public static void main(String[] args) { List list=new ArrayList<>(); list.add(0, "a"); list.add(1, "b"); list.add(2, "c"); list.add(3, "d"); // Iterator iterator =list.iterator(); // while (iterator.hasNext()) { // System.out.println(iterator.next()); // } for (Object object : list) { System.out.println(object); } } }
(2)Set接口之HashSet实现类
package com.test.List; import java.util.HashSet; public class SetTest { public static void main(String[] args) { // TODO 自动生成的方法存根 HashSet<String> hSet=new HashSet<>(); hSet.add("你好"); hSet.add("我在学集合"); hSet.add("哦,学的怎么样了"); hSet.add("听难的"); hSet.add("没事,加油"); hSet.add("恩,好的,谢谢"); for (String string : hSet) { System.out.println(string); } } }
(3)Map接口之TreeMap实现类
package com.test.List; import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class User { private int id; private String name; private String address; public User(int id,String name,String address) { this.id=id; this.name=name; this.address=address; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public static void main(String[] args) { TreeMap<Integer, User> map=new TreeMap<Integer,User>(); map.put(1, new User(1,"小红","北京")); map.put(2, new User(2,"小蓝","广州")); map.put(3, new User(4,"小东","深圳")); map.put(4, new User(5,"小白","上海")); //返回此映射所包含的键的视图 Set<Integer> keySet=map.keySet(); /*Iterator<Integer> i=keySet.iterator(); while (i.hasNext()) { System.out.println(map.get(i.next())); }*/ //foreach是迭代器的简便写法 for (Integer integer : keySet) { User user=map.get(integer); System.out.println(user.getId()+";"+user.getName()+";"+user.getAddress()); } } }
总结:
(1)因为数组长度是固定的,且只能存储单一类型的数据,而集合突破了这两种限制,可以说集合是数组的一种拓展;
(2)Java的集合接口分为3大类,List、Set及Map,List是有序可重复性的,Set是无序不可重复的,Map存储的是一组键值对;
(3)感觉学一个新的知识点,就应该先了解它最重要的功能,然后从最重要的功能开始学起。集合最重要的就是充当容器,也就是存储的功能,所以关于往集合里加入数据和遍历数据的方法是最开始要了解的。
(4)List和Set加入数据都是用add()方法,Map加入数据用的是put();
(5)遍历:三者都可以用迭代器,即iterator,或者用foreach循环。