集合框架常用方法

学习一下集合框架的常用方法吧
增加
add有两种用法
第一种是直接add对象,把对象加在最后面

heros.add(new Hero("hero " + i));

第二种是在指定位置加对象

heros.add(3, specialHero);

自己练习,犯了错误。
代码如下

public class TestCollection {
    public static void main(String[] args) {
        ArrayList h=new ArrayList();

        h.add(2,"huhu");
        System.out.println(h);
    }
}

在这里插入图片描述
分析一下,第一次不指定位置插入的话,对应的下标是0,长度为1,然后第二次指定位置插入,如果写的是1的话,不会报错,会正常插入,但是是2就报错了。而且也没有动态扩容,,我个人觉得是因为不连续,然后ArrayList不支持,就报错了。
学习正确的代码。
准备好一个已经存放好5个对象的数组,然后在指定位置插入对象

public class TestCollection1 {
    public static void main(String[] args) {
        //创建集合
        ArrayList h=new ArrayList();
        //创建好连续的区域,先放5个对象进去
        for (int i = 0; i <5 ; i++) {
            h.add(new Hero("hero"+i));

        }
        System.out.println(h);
        System.out.println("插入后的数组");
        //在指定位置插入对象
        h.add(3,"bbb");
        System.out.println(h);
    }
}

在这里插入图片描述
我如果从下标6插入就会报越界错误

public class TestCollection1 {
    public static void main(String[] args) {
        //创建集合
        ArrayList h=new ArrayList();
        //创建好连续的区域,先放5个对象进去
        for (int i = 0; i <5 ; i++) {
            h.add(new Hero("hero"+i));

        }
        System.out.println(h);
        System.out.println("插入后的数组");
        //在指定位置插入对象
        h.add(6,"bbb");
        System.out.println(h);
    }
}

在这里插入图片描述
注:按第一种插入方法,只要插入的那一个和前一个下标是连续的,就一直能插入,否则会报越界错误。
按第二种插入方法,得先准备好一个已经存放对象的数组,然后再写,你要从哪插入。

判断是否存在
通过方法contains 判断一个对象是否在容器中
判断标准: 是否是同一个对象,而不是name是否相同

public class TestCollection1 {
    public static void main(String[] args) {
        //创建集合
        ArrayList h=new ArrayList();
        //创建好连续的区域,先放5个对象进去
        for (int i = 0; i <5 ; i++) {
            h.add(new Hero("hero"+i));

        }
        System.out.println(h);
        System.out.println("插入后的数组");
        //在指定位置插入对象
        h.add(3,"bbb");
        System.out.println(h);

        // 判断一个对象是否在容器中
        // 判断标准: 是否是同一个对象,而不是name是否相同
        System.out.println(h.contains(new Hero("hero0")));
        System.out.println(h.contains(new Hero("Hero6")));
    }
}

在这里插入图片描述
如果使用contains判断
h.contains(new Hero(“hero0”))
注意:new的话就是一个新的对象的产生,而不是说名字相同了,就是同一个对象了·。
如果这样写
h.contains(“hero0”)

public class TestCollection1 {
    public static void main(String[] args) {
        //创建集合
        ArrayList h=new ArrayList();
        //创建好连续的区域,先放5个对象进去
        for (int i = 0; i <5 ; i++) {
            h.add(new Hero("hero"+i));

        }
        Hero h1=new Hero("haha");
        h.add(h1);
        System.out.println(h);
        System.out.println("插入后的数组");
        //在指定位置插入对象
        h.add(3,"bbb");
        h.add(5,"aaa");
        System.out.println(h);


        // 判断一个对象是否在容器中
        // 判断标准: 是否是同一个对象,而不是name是否相同
        System.out.println(h);
        System.out.println(h.contains("haha"));
        System.out.println(h.contains(new Hero("hero0")));
        System.out.println(h.contains("bbb"));
        System.out.println(h.contains("aaa"));

    }
}

在这里插入图片描述
通过该段代码,发现只要new的话,再用contains判断,发现都是false。
看了半天,结果发现自己啊啊啊啊,好蠢。

public class TestCollection1 {
    public static void main(String[] args) {
        //创建集合
        ArrayList h=new ArrayList();
        //创建好连续的区域,先放5个对象进去
        for (int i = 0; i <5 ; i++) {
            h.add(new Hero("hero"+i));

        }
        Hero h1=new Hero("ccc");
        h.add(h1);
        System.out.println(h);
        System.out.println("插入后的数组");
        //在指定位置插入对象
        h.add(3,"bbb");
        h.add(5,"aaa");
        h.add(6,"her07");
        System.out.println(h);


        // 判断一个对象是否在容器中
        // 判断标准: 是否是同一个对象,而不是name是否相同
        System.out.println(h.contains(h1));//true
        System.out.println(h.contains(new Hero("hero0")));//false
        System.out.println(h.contains("bbb"));//true
        System.out.println(h.contains("aaa"));//true
        System.out.println(h.contains("her07"));//true

    }
}

// 判断一个对象是否在容器中
判断标准: 是否是同一个对象,而不是name是否相同
这句话真的是太重要了,我一直拿的是name和h比较,怪不得一直false。
在这里插入图片描述
获取指定位置的对象
indexOf用于判断一个对象在ArrayList中所处的位置
与contains一样,判断标准是对象是否相同,而非对象的name值是否相等

public class TestCollection1 {
    public static void main(String[] args) {
        //创建集合
        ArrayList h=new ArrayList();
        //创建好连续的区域,先放5个对象进去
        for (int i = 0; i <5 ; i++) {
            h.add(new Hero("hero"+i));

        }
        Hero h1=new Hero("ccc");
        h.add(h1);
        System.out.println(h);
        //在指定位置插入对象
        h.add(3,"bbb");
        System.out.println("插入后的数组");
        System.out.println(h);


        // contains判断一个对象是否在容器中
        // 判断标准: 是否是同一个对象,而不是name是否相同
        System.out.println(h.contains(h1));//true
        System.out.println(h.contains(new Hero("hero0")));//false
        //indexOf用于判断一个对象在ArrayList中所处的位置
        //与contains一样,判断标准是对象是否相同,而非对象的name值是否相等
        System.out.println(h.indexOf(h1));

    }
}

在这里插入图片描述
切记一定要是通过那个实例,而不是name,切记切记,我已经错两次了。
删除用于把对象从ArrayList中删除
remove可以根据下标删除ArrayList的元素
heros.remove(2);
也可以根据对象删除
heros.remove(specialHero);

public class TestCollection1 {
    public static void main(String[] args) {
        //创建集合
        ArrayList h=new ArrayList();
        //创建好连续的区域,先放5个对象进去
        for (int i = 0; i <5 ; i++) {
            h.add(new Hero("hero"+i));

        }
        Hero h1=new Hero("ccc");
        h.add(h1);
        System.out.println(h);
        //在指定位置插入对象
        h.add(3,"bbb");
        System.out.println("插入后的数组");
        System.out.println(h);


        // contains判断一个对象是否在容器中
        // 判断标准: 是否是同一个对象,而不是name是否相同
        System.out.println(h.contains(h1));//true
        System.out.println(h.contains(new Hero("hero0")));//false
        //indexOf用于判断一个对象在ArrayList中所处的位置
        //与contains一样,判断标准是对象是否相同,而非对象的name值是否相等
        System.out.println(h.indexOf(h1));
        //删除
      h.remove(0);
       h.remove(h1);
        System.out.println("删除后的数组");
        System.out.println(h);

    }
}

在这里插入图片描述
替换
set用于替换指定位置的元素

//替换set
        System.out.println("把下标是2的元素替换成  lala");
        h.set(2,new Hero("lala"));
        System.out.println("替换后的数组为:");
        System.out.println(h);

在这里插入图片描述

 //替换set
        System.out.println("把下标是2的元素替换成  lala");
        h.set(2,("jjj"));
        System.out.println("替换后的数组为:");
        System.out.println(h);

在这里插入图片描述
尝试了一下,不new也能够成功替换。
获取大小
size 用于获取ArrayList的大小
直接数组.size()就可以了。

转换为数组
toArray可以把一个ArrayList对象转换为数组。
需要注意的是,如果要转换为一个Hero数组,那么需要传递一个Hero数组类型的对象给toArray(),这样toArray方法才知道,你希望转换为哪种类型的数组,否则只能转换为Object数组

public class TestCollection2 {
    public static void main(String[] args) {
        ArrayList h=new ArrayList();
        for (int i = 0; i <5 ; i++) {
            h.add(new Hero("hero"+i));

        }
        Hero h1=new Hero("dada");
        h.add(h1);
        System.out.println("转换钱的数组");
        System.out.println(h);
        System.out.println("转换后的新数组为");
        //因为想要转换为一个对象数组,因此需要新建一个对象数组
        //对象数组格式Hero hero[]=new Hero[]{};
        //此处需要进行类型转换
        Hero heroes[] = (Hero[]) h.toArray(new Hero[]{});
        System.out.println(heroes);
    }
}

在这里插入图片描述
注意建对象数组的格式。

addAll 把另一个容器所有对象都加进来

public class TestCollection3 {
    public static void main(String[] args) {
        //新建一个数组1
        ArrayList h1=new ArrayList();
        for (int i = 0; i <5 ; i++) {
            h1.add(new Hero("hero"+i));

        }
        System.out.println("第一个数组为:"+h1);
        //再新建第二个数组
        ArrayList h2=new ArrayList();
        h2.add("ll");
        h2.add("aa");
        h2.add("dd");
        h1.addAll(h2);
        System.out.println("第二个数组为:"+h2);
        System.out.println("此时第一个数组为:"+h1);
    }
}

在这里插入图片描述
注意addAll时,往那个数组里添加元素,注意位置,别写反了。

清空数组clear

 h1.clear();
 System.out.println("清空后的数组"+h1);

在这里插入图片描述
如果就是要判断集合里是否存在一个 name等于 "hero 1"的对象,应该怎么做?
光想到了contains,然后就没有思路了,有点悲伤。。。。。。
开始学习别人的代码。

public class Demo01 {
    ///如果就是要判断集合里是否存在一个 name等于 "hero 1"的对象.
    //判断一个ArrayList()中的对象是否有名字是“hero 1”的。
    //思路:创建ArrayList对象heros.
    //        Hero h = heros.get(i);
    public static void main(String[] args) {
        ArrayList h=new ArrayList();
        for (int i = 0; i < 5; i++) {
            h.add(new Hero("hero" +i));

        }
        System.out.println("原数组为:"+h);
        String name="hero1";
        for (int i = 0; i < h.size(); i++) {
            //获取集合中元素的值
            Hero h1= (Hero) h.get(i);
            if(name.equals(h1.name)){
                System.out.println("找到了"+name);
               break;
            }

        }

    }
}

字符串内容的比较,equals
1.首先定义一个字符串,赋给他你想要找的那个具体的值
2.然后进行对该数组遍历,然后新建一个对象数组,
Hero h1= (Hero) h.get(i);//获取原来的集合数组中的元素。
然后再通过一个if判断,就可以了。

做一个一样的MyStringBuffer练习,但是不使用字符数组,而是使用ArrayList来实现
没有思路,不能光借鉴别人的,给自己留点时间思考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值