java集合容器

---恢复内容开始---

       java中集合是一种容器,数组也是一种容器,数组作为容器优势就是效率比较高,而数组本身却不够灵活。数组的容量需要事先定义好,这就不能随着需求的变化而扩容。比如:我们在一个用户管理系统中,需要把今天注册的所有用户取出来,那么这样的用户有多少个?我们在写程序时是无法确定的。这种情况就不能用数组,因而引进集合容器。

Collection接口:一个独立的元素序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能有重复元素。Queue按照排队规则来确定对象产生的顺序(通常与它们插入的顺序相同)

集合 的体系:


 Collection :单例集合的根接口
 List:  如果是实现了List接口的集合类,具备的特点: 有序,可重复。
 ArrayList ArrayList: 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
LinkedList LinkedList :底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
Vector: 底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。

Set:  如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
HashSet :底层是使用了哈希表来支持的,特点: 存取速度快.

hashSet的实现原理:
往Haset添加元素的时候,HashSet会先调用元素的hashCode方法得到元素的哈希值,
然后通过元素的哈希值经过移位等运算,就可以算出该元素在哈希表中的存储位置。

情况1: 如果算出元素存储的位置目前没有任何元素存储,那么该元素可以直接存储到该位置上。

情况2: 如果算出该元素的存储位置目前已经存在有其他的元素了,那么会调用该元素的equals方法与该位置的元素再比较一次
,如果equals返回的是true,那么该元素与这个位置上的元素就视为重复元素,不允许添加,如果equals方法返回的是false,那么该元素运行 添加。

 TreeSet 如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。


参考:https://blog.csdn.net/qq_38341596/article/details/78749629

Collection方法:

示例:

package jihe;
/**
 * 简单Collection示例
 * @author Gsan
 */

import java.util.ArrayList;
import java.util.Collection;

public class SimpleCollection {
    public static void main(String[] args){
        Collection<Integer> c=new ArrayList<>();
        for(int i=0;i<10;i++)
            c.add(i);
            for(Integer i:c){//需用foreach遍历输出
                System.out.println(i+",");
            }
    }
}

 运行结果:

package jihe;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * 测试Collection接口中的方法
 * author Gsan
 */
public class TestList {
    public static void main(String[] args){

        test01();
        test02();
        test03();
    }
    public static void test01(){
        Collection<String> c=new ArrayList<>();

        System.out.println(c.size());//Collection长度
        System.out.println(c.isEmpty());//判断Collection是否为空

        //添加内容
        c.add("老谭");
        c.add("小谭");
        System.out.println(c);
        System.out.println(c.size());

        System.out.println(c.contains("小小谭"));//判断Collection中是否包含“小小谭”

        Object[] objs=c.toArray();//转化出一个Object数组
        System.out.println(objs);

        c.remove("小谭");
        System.out.println(c);

        c.clear();//移除所有元素
        System.out.println(c.size());
    }

    public static void test02(){
        List<String> list01=new ArrayList<>();
        list01.add("aa");
        list01.add("bb");
        list01.add("cc");
        System.out.println("list01:"+list01);

        List<String> list02=new ArrayList<>();
        list02.add("dd");
        list02.add("ee");
        list02.add("aa");
        System.out.println("list02:"+list02);

//        // 取交集
//        list01.retainAll(list02);
//        System.out.println("list03:"+list01);

        //list02加进list01
        list01.addAll(list02);
        System.out.println("list01:"+list01);

        //list01里除去list02
        list01.removeAll(list02);
        System.out.println("list01:"+list01);

        //判断list01是否包含全部list02元素
        System.out.println(list01.retainAll(list02));
    }

    public static void test03(){
        List<String> list=new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        System.out.println(list);

        list.add(2,"老谭");//第二个位置插入元素
        System.out.println(list);

        list.remove(2);//删除第二个元素
        System.out.println(list);

        list.set(2,"老谭");//第二个位置设置“老谭”元素,代替原来第二个位置元素
        System.out.println(list);

        System.out.println(list.get(2));//获取第二个元素

        list.add("C");
        list.add("B");
        list.add("A");
        System.out.println(list);
        System.out.println(list.indexOf("B"));//从左到右第一次出现的位置
        System.out.println(list.lastIndexOf("B"));//从左到右最后一次出现的位置
    }
}

运行结果:

 

猜你喜欢

转载自www.cnblogs.com/Gsan/p/10339854.html
今日推荐