JAVA集合

一.集合

1.集合的由来

集合是容器类型,容器类型还有(数组和Stringbuffer)

2.数组和集合的区别

​ 数组的长度固定
​ 集合的长度可变

数组储存的是同一类型的数据
集合储存的可以是任意类型的数据

数组可以储存基本数据类型 和引用数据类型
集合只能存储引用类型的数据

3.Iterator 迭代器

①先创建一个集合

list c1=new arraylist();
C1.add("1");
C1.add("2");
C1.add("3");
C1.add("4");
//创建迭代器接口
Iterator it=c1.iterator();
//提取元素
while (it.hasNext()){						查看集合内部是否为空 返回值是true 或者false
    String name = it.next();				获取集合内的下一个元素,,,其实就是本为元素,因为集合首先是空的
    System.out.println(name);

4.迭代器的注意事项

循环尽量用while
不要多次使用next方法
迭代器是依赖于集合而存在的
迭代器啥时候用啥时候创建

5.泛型

简单理解为参数的数据类型

提前限定好集合只能存储的数据类型

举例:

List<String> list = new ArrayList();   // 这个集合泛型为了字符串  之后存储也只能存储字符串

list.add("张益鸣")

二.List

1.ArrayList的特点

特点:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素

举例:

ArrayList list = new ArrayList();
System.out.println(list);

2.LinkedList的特点

底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素

LinkedArrayList list = new LinkedArrayList();
System.out.println(list);

3.List的子类特点及功能

list是有序的 意思是进来是啥顺序出去就是啥顺序 可重复
此类为list集合的特有功能

3.1 添加功能

​ 在指定位置加入某各元素 不能元素越界

    void  add (int index,objecct lement)

3.2 获取功能

  • object get(int index)获取指定位置的元素
    1
    li1.get(1) 获取指定位置的数据
    *列表迭代器
    *ListInerator listIterator() list特有的功能
    

3.3 删除功能

  • object remove(int index)//删除指定的元素
    1
    删除指定位置的元素 并且返回该元素
    

3.4 修改功能

改变指定位置的数据

set(int index,E element);

3.5 遍历功能

利用get和size方法进行结合出来的遍历

for (int i = 0; i < li1.size(); i++) {
System.out.println(li1.get(i));

特有的迭代器
但是基本上不用,因为不通用(其实与基本的迭代器差不多,操作一样)

迭代器 是依赖于集合的不能存在并发执行修改
迭代器遍历元素的时候,通过集合是不能修改内容的
迭代器在添加元素的时候应该使用ListIterator中的add方法
用普通迭代器中add不行
新添加的元素是跟在刚才迭代的元素的后面

三.Set

1. set 的概念

set集合不包含重复元素 并且有序 不会按照自己输入的顺序 是个接口 (从大到小)

set集合:存储顺序和添加顺序不一定相同

​ 不可以保存相同的数据

​ 每个元素没有索引(即:不可以通过下标遍历,可通过迭代器)

2.HashSet概述

2.1HashSet不保证set的迭代顺序,特别是它不保证该顺序恒久不变

2.2HashSet如何保证元素的唯一性

底层数据结构是哈希表(元素是链表的数组)

哈希表依赖与哈希值存储

添加功能底层依赖两个方法:

int hashCade();

boolean equals(Object obj);

3.LinkedHashSet(是hashset的子类)

有两个数据机构 一个是链表 一个是hash表
A. 元素有序唯一
B. 由链表保证元素有序
C. 由哈希表保证元素唯一
D. 存取顺序一致

4.Treeset 默认排序 并且消除重复项

是排序基于treemap的put方法来进行排序的
还有比较器排序是依赖于compareTo()方法 而这个方法是定义在定义在Comparable里面的 所以要想重写该方法 就必须先Comparable接口 则就是自然排序

举例:

public class Book implements Comparable {
    /**
     * 书名
     */
    private String name;
    /**
     * 作者
     */
    private String author;
    /**
     * 单价
     */
    private int price;
    /**
     * 销量
     */
    private int sales;

    @Override
    public int compareTo(Object o) {
        Book book = (Book) o;
        int y = this.name.compareTo(book.getName());
        int x = book.getAuthor().compareTo(this.author);
        int z = getPrice()-this.price;
        int w = getSales()-this.sales;
        if (y!=0){
            return y;
        }else if (x!=0){
            return x;
        }else if (z!=0){
            return z;
        }else {
            return w;
        }
    }
}

输出:

    SortedSet<Book> books = new TreeSet<>();
    books.add(new Book("浮城谜事", "娄烨", 35, 150));

四. Map集合

1. Map集合的特点

将映射得值的对象,一个映射不能包含重复的键;
每个键最多只能映射到一个值

2.Map集合和collection集合的区别

A. map集合存储元素成对出现,map集合的键是唯一的,只可以重复出现,可理解为夫妻对
B. collection集合存储元素是单度出现的,collection的儿子set是唯一的 list是可重复的,可理解为是单独的
C. map集合的数据结构只针对于键有效,与值无关
collection集合的数据结构是针对于元素有效

3.Hashmap的功能

举例:

A.添加功能 V put(k key, V value)

Map<String, String> map = new HashMap<>();
map.put("key1","value1");
System.out.println(map.get("key1"));

B.删除功能 void clear()清除所有的映射关系

V remove (object key) 根据键移除键值对元素 并把值返回

Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
 map.remove("key1");

C.获取功能 set<map,entry<k,v>> entrySet()=对象.entrySet

public void test09() {
    //利用map.entrySet();  将map里的key和value转为一个set整体 然后再遍历输出
    Map<String, String> map = new HashMap<>();
    for (int i = 0; i < 10; i++) {
        map.put("key" + i, "value" + i);
    }
    Set<Map.Entry<String, String>> entrySet = map.entrySet();
    Iterator<Map.Entry<String, String>> it = entrySet.iterator();
    while (it.hasNext()){
        Map.Entry<String, String> entry = it.next();
        System.out.println("key >>> " + entry.getKey() + "\tvalue >>> " + entry.getValue());
    }
}

V get (object ket) 根据键获取值
Set(k) keyset 获取集合中所有键的集合
Collection values() 获取集合中所有值的集合

public void test08() {
    //将value变成collection 然后利用迭代器 遍历输出
    Map<String, String> map = new HashMap<>();
    for (int i = 0; i < 10; i++) {
        map.put("key" + i, "value" + i);
    }
    Collection<String> values = map.values();
    Iterator<String> it = values.iterator();
    while (it.hasNext()) {
        String value = it.next();
        System.out.println(value);
    }
}

D.长度功能 int size() 返回键值对的个数

Map<String, String> map = new HashMap<>();
map.put("key1","value1");
System.out.println(map.size());

4. LinkedHashMap<String, String>

LinkedHashMap 可以保持序列的有序性(即 你输入数据的顺序 HashMap的保证数据的唯一性 Linked保证数据的有序性)

举例:

public void test01(){
    //new linedHashMap  输出后就是有序的
    Map<String, String> map = new LinkedHashMap();
    for (int i = 0; i < 10; i++) {
        map.put("key" + i, "value" + i);
    }
    Set<Map.Entry<String, String>> entrySet = map.entrySet();
    Iterator<Map.Entry<String, String>> it = entrySet.iterator();
    while (it.hasNext()){
        Map.Entry<String, String> entry = it.next();
        System.out.println("key >>> " + entry.getKey() + "\tvalue >>> " + entry.getValue());
    }
}

5. HashMap和hashtable的区别

hashMap是用来替代Hashtable的 hashtable的用法和HashMap差不多
Hashtable 线程安全 不允许null键和null值
HashMap线程不安全 效率高 允许null键和null值

举例:

public void test01(){
    Map<String, String> map = new Hashtable();
    for (int i = 0; i < 10; i++) {
        map.put("key" + i, "value" + i);
    }
    Set<Map.Entry<String, String>> entrySet = map.entrySet();
    Iterator<Map.Entry<String, String>> it = entrySet.iterator();
    while (it.hasNext()){
        Map.Entry<String, String> entry = it.next();
        System.out.println("key >>> " + entry.getKey() + "\tvalue >>> " + entry.getValue());
    }
}

6.ConcurrentHashMap

public void test01() {
    Map<String, String> map = new ConcurrentHashMap();
    for (int i = 0; i < 10; i++) {
        map.put("key" + i, "value" + i);
    }
    Set<Map.Entry<String, String>> entrySet = map.entrySet();
    Iterator<Map.Entry<String, String>> it = entrySet.iterator();
    while (it.hasNext()) {
        Map.Entry<String, String> entry = it.next();
        System.out.println("key >>> " + entry.getKey() + "\tvalue >>> " + entry.getValue());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值