Java_集合框架

集合框架概念

  • 集合框架是一个用来代表和操作集合的统一架构.所有的集合框架都包含以下内容:
    1.接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表细节.在面向对象语言.接口通常形成一个层次.
    2.实现(类):是集合接口的具体实现.
    1. 算法:是实现集合接口的对象里的方法执行的一些有用的计算.
  • 特点
    1.集合的长度是可变的.
    2.集合只用于存储对象.
    3.集合可以存储不同类型的对象.

Collection接口

*定义了存取一组对象的方法,其子接口Set和 List分别定义了存储方法.
*Set中的数据对象没有顺序且不可以重复.
*List中的数据对象有顺序且可以重复.

1.PNG

在上图中 Collection是一个超级接口 Set和List继承与它.Set和list也是接口.
hashSet是Set的实现类,ArrayList和LinkedList是List的实现类.

LIst

ArrayList的一些方法

  • ArrayList采用数组实现,适合查找,更新
ArrayList list =  new ArrayList();
        list.add("one");
        list.add("two");
        list.add("thre");
        System.out.println(list);
        //删除元素
        list.remove(1);//根据下标
        list.remove("thre");//根据元素
        System.out.println(list);
        //跟新
        list.set(0,"跟新元素");
        System.out.println(list);
        //查找元素
        Object obj =list.get(0);
        System.out.println(obj);
        
        //是否包含某元素
        boolean isContain = list.contains("跟新元素");
        System.out.println(isContain);
        //元素个数
        int size = list.size();
        System.out.println(size);

Lindedlist的一些方法

  • LinkedList 采用双向链表实现,适合添加,删除.
LinkedList list = new LinkedList();
        
        list.add("one");
        list.add("two");
        list.add("thre");
        System.out.println(list);
        //删除元素
        list.remove(1);//根据下标
        list.remove("thre");//根据元素
        System.out.println(list);
        //跟新
        list.set(0, "跟新元素");
        System.out.println(list);
        //查找元素
        Object obj =list.get(0);
        System.out.println(obj);
        
        //是否包含某元素
        boolean isContain = list.contains("跟新元素");
        System.out.println(isContain);
        //元素个数
        int size = list.size();
        System.out.println(size);

这些都是list的两个实现类,上面的方法都是一些常用的方法要熟练应用.

Set

HashSet一些方法

  • 创建HashSet对象 (因为是无序的,所以不可以用get来获取元素)
    *HashSet基于HastMap实现的,利用了键不能重复的特点.
  • 重复元素的判断机制
    1.只要obj == obj1 认为 obj和obj1是相等的元素
    2.hashCode和 equals相等 就认为元素相等.
HashSet set = new HashSet();
        set.add("1");//添加元素
        set.add("2");
        set.add("1");
        System.out.println(set);
        //遍历set
        for (Object object : set) {
            System.out.println(object);
        }
        //是否包含元素
        boolean iscon = set.contains("1");
        System.out.println(iscon);
        
        //删除元素
        set.remove("1");

TreeSet

  • 可以排序 1.自然排序 2.自定义排序
  • TerrSet可以对数字和字符串排序 因为都实现了comparable接口
  • 如果在comparable接口中返回0 认为是同一元素.
public static void main(String[] args) {
        TreeSet set = new TreeSet();
//      set.add("2");
//      set.add("1");
//      set.add("4");
//      set.add("6");
//      set.add("8");
        Person1 p = new Person1();
        p.name = "nana";
        p.age = 11;
        Person1 p1 = new Person1();
        p1.name = "momo";
        p1.age = 10;
        Person1 p2 = new Person1();
        p2.name = "lala";
        p2.age = 8;
        set.add(p);
        set.add(p1);
        set.add(p2);
        System.out.println(set);
    }
}
class Person1 implements Comparable{
    String name;
    int age;
@Override  // 自定义相等的规则
    public boolean equals(Object obj) {
    // 如果类型不相等,返回false
    if (!(obj instanceof Person)) {
            return false;
        }
    // 如果名字相同, 返回true
    if (((Person)obj).name.equals(this.name)) {
        return true;
    }
        // 如果名字不相同,返回false
    return false;
    }
    
    // hashCode
    @Override    // 计算一个对象的hash值
    public int hashCode() {
        return this.name.hashCode();
    }
    @Override
    public int compareTo(Object o) {
        if (!(o instanceof Person1)) {
            Person1 p = (Person1)o;
            if (this.age >p.age) {
                return 1;
                }else if(this.age == p.age){
                return 0;
            }else {
                return -1;
            }
        }
        return 0;
    }
    @Override  //自定义输出
    public String toString() {
        return "name:"+this.name+" age:"+age;
    }

Map接口

  • Map接口定义了存储"键(key)-值(value)映射对"的方法.
  • 键不能重复 value可以重复.
HashMap map = new HashMap();
    //保存数据
    map.put("键", "值");
    map.put("键1", "值1");
    map.put("键2", "值2");
    //读取数据
    Object obj = map.get("键");
    System.out.println(obj);
    
    //遍历
    for (Object item : map.keySet()) {
        System.out.println(map.get(item));
    }
    //跟新
    map.put("键", "跟新的值");
    System.out.println(map);
    //删除
    map.remove("键");
    System.out.println(map);
    //包含
    map.containsKey("键1");
    //map.containsValue("值1");
    //System.out.println(map);
    //清空
    map.clear();
    //System.out.println(map);

TreeMap

  • 根据key进行排序
public static void main(String[] args) {
        Stu stu = new Stu();
        stu.age = 12;
        stu.name = "杨少锋";
        
        Stu stu1 = new Stu();
        stu1.age = 17;
        stu1.name = "阿墩";
        
        Stu stu2 = new Stu();
        stu2.age = 11;
        stu2.name = "eerdun";
        
        Stu stu3 = new Stu();
        stu3.age = 11;
        stu3.name = "张三";
    
        TreeMap map = new TreeMap();
        map.put("12", stu);
        map.put("2", stu1);
        map.put("15", stu2);
        map.put("3", stu3);
        System.out.println(map);
    }
}


class Stu  implements Comparable{
    @Override
    public String toString() {
        return "Stu [age=" + age + ", name=" + name + "]";
    }
    int age;
    String name;
    @Override
    public int compareTo(Object o) {
        Stu stu = (Stu)o;
        if (this.age > stu.age) {
            return 1;
        } else if (this.age == stu.age) {
            
            // 年龄一样我们可以按照名字进行排序
            return 0;
        } else {
            return -1;
        }
    }
}



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容