先说点别的:
集合和数组的区别:
集合:长度可变,集合存储不同类型元素,集合只可以存引用类型。
数组:数组长度固定不可变,数组存储同一类型元素,数组可以存基本类型,也可以存引用类型。
现在来说说继承体系:(这个图是重点,一定要熟记于心!!!!)
Collection和Map是同级关系。
现在来一步一步的看:
1:添加功能
boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素
2:删除功能
void clear():移除所有元素
boolean remove(Object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素(是一个还是所有)
3:获取功能
Iterator iterator()(重点)
4:判断功能
boolean contains(Object o):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有)
boolean isEmpty():判断集合是否为空
5:长度功能
int size():元素的个数
这块有个面试题,可能会遇到,看到的小伙伴可以注意一下
{数组有没有length()方法呢?字符串有没有length()方法呢?集合有没有length()方法呢?} 一定要记住哦!
数组求长度用length属性
字符串求长度用length()方法
集合求长度用size()方法
二丶迭代器(集合独有的遍历方式)
用while Iterator iterator=collection.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } 用for循环 Iterator iterator=collection.iterator(); for(;iterator.hasNext;){ System.out.println(iterator.next()); }
List:
代表一个元素有序、且可重复的集合,集合中的每个元素都有其对应的顺序索引
允许使用重复元素,可以通过索引来访问指定位置的集合元素。
默认按元素的添加顺序设置元素的索引。
package test1; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.junit.Test; public class TestList { //ArrayList是List的主要实现类 public void test() { List list=new ArrayList(); //添加元素 list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add(123); System.out.println(list); //查询 System.out.println(list.get(1)); //删除 System.out.println(list.remove(1)); System.out.println(list.get(1)); //修改 list.set(0, 345); System.out.println(list.get(0)); } @Test public void test1() { List list=new ArrayList(); //添加元素 list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add(123); //for循环 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } System.out.println("========"); //foreach for (Object object : list) { System.out.println(object); } System.out.println("========"); //迭代器 Iterator i=list.iterator(); while (i.hasNext()) { System.out.println(i.next()); } } }
ArrayList:
底层数据结构是数组,查询快,增删慢。 线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。 线程安全,效率低。
LinkedList:
底层数据结构是链表,查询慢,增删快。 线程不安全,效率高。
Set:
无序(输出的顺序和插入的顺序不一样),不允许重复
hashset
不保证顺序
底层数据结构是哈希表
linkedhashset
底层是哈希表加链表
哈希表保证唯一性,链表保证有序
treeset
可以排序 使用元素自然排序排序
使用Comparator
Map 和collection的区别
map存储元素是成对出现的,键是唯一的,值可重复
Collection存储元素是单独的
map集合的数据结构只针对键有效,和值无关
collection的数据结构针对元素有效
功能
Map集合的功能概述:
1:添加功能 V put(K key,V value):添加元素。这个其实还有另一个功能
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
2:删除功能 void clear():移除所有的键值对元素 V remove(Object key):根据键删除键值对元素,并把值返回
3:判断功能 boolean containsKey(Object key):判断集合是否包含指定的键 boolean containsValue(Object value):判断集合是否包含指定的值 boolean isEmpty():判断集合是否为空
4:获取功能 Set<map.entry<k,v>> entrySet():??? V get(Object key):根据键获取值 Set keySet():获取集合中所有键的集合 Collection values():获取集合中所有值的集合
5:长度功能 int size():返回集合中的键值对的对数
hashmap
键是哈希表结构,可以保证键的唯一性
LinekedHashMap Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。
TreeMap 键是红黑树结构,可以保证键的排序和唯一性
Collections
Collections:是针对集合进行操作的工具类,都是静态方法。
面试题: Collection和Collections的区别?
Collection:是单列集合的顶层接口,有子接口List和Set。
Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法
要知道的方法
public static void sort(List list):排序 默认情况下是自然顺序。
public static int binarySearch(List list,T key):二分查找
public static T max(Collection coll):最大值
public static void reverse(List list):反转
public static void shuffle(List list):随机置换
HashMap和Hashtable的区别
map线程不安全的,效率高
table安全,低
List,Set,Map等接口是否都继承子Map接口