Java集合总结

Collection:接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是SetListSet中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式

 

MapJava.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value

 

Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:
1.hasNext()是否还有下一个元素。
2.next()返回下一个元素。
3.remove()删除当前元素。

 

三种重要的接口:

1List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

2Set(无序、不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

3Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。

 

  1. List接口的实现:

ArrarList:底层数据结构是数组,默认大小是10,扩容方式是原大小的1.5倍。优点:查询快

缺点:插入和删除慢,线程不安全(尽量给定容量大小避免频繁数组扩容)

ArrayList的基本使用方法:

Vector:和ArrayList的区别不大,是线程安全的。

LinkedList:底层数据结构是链表,优点:删除和插入快,缺点:查找慢。

2.Set接口的实现:

HashSet: 底层用数组存储数据,默认初始化容量16,加载因子0.75(实际上是HashMap的一个实例)

HashSet的应用:给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符,保证给定的字符串中有重复的

public static char findFirstRepeat(String A, int n) {
        
        char[] a=A.toCharArray();
        HashSet hs=new HashSet<>();
        for(int i=0; i<n;i++) 
        {
            if (!hs.add(a[i])) 
            {
                return a[i];
            }
        }
        return 0;
        }
     
        public static void main(String[] args)
        {
            System.out.println(findFirstRepeat("guoyinqiu110",12));
        }

TreeSet:可以用来自动排序。

LinkedHashSet:继承于HashSet,又基于LinkedHashMap来实现的。

3.Map接口的实现:

HashMap:底层数据结构是数组加链表,用键值段的方式来保存数据。默认数组长度16,必须满足2 的次方,特点:1.key 不允许重复   2.允许空键和空值(但空键只有一个,且放在第一位)  3.元素是无序的,而且顺序会不定时改变
线程不安全,扩容的时候会出现问题

Hashtable:几乎和Hashtable一样,最大的区别在于线程安全问题。HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable。

LinkedHashMap:LinkedHashMap在HashMap的基础上增加了两个属性用于保证迭代顺序,分别是 双向链表头结点header 和 标志位accessOrder (值为true时,表示按照访问顺序迭代;值为false时,表示按照插入顺序迭代)。默认初始容量 (16)和默认负载因子(0.75)

TreeMap:红黑树算法的实现

 

 

迭代器的使用:三种迭代方式

public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String,String>();
map.put("001", "宝马");
map.put("002", "奔驰");
map.put("003", "奥迪");
firstIterator(map);
System.out.println("===");
twoIterator(map);
System.out.println("===");
threeItertor(map);
}
/**
* entry
* @param map
* @return
*/
public static void firstIterator(Map<String, String> map) {
for(Entry<String,String> entry:map.entrySet()) {
    String keys = entry.getKey();
    String values = entry.getValue();
    System.out.println("key = "+ keys + ";value = "+ values);
}
}
/**
* keySet
* @param map
*/
public static void twoIterator(Map<String, String> map) {
for(String keys:map.keySet()) {
    String values = map.get(keys);
    System.out.println("key = "+ keys + ";value = "+ values);
}
}
/**

* @param map
*/
public static void threeItertor(Map<String, String> map) {
    Iterator<String> iterator = map.keySet().iterator();
    while(iterator.hasNext()) {
        String keys = iterator.next();
        String values = map.get(keys);
        System.out.println("key = "+ keys + ";value = "+ values);
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值