编程语言
首页 > 编程语言> > java-集合框架

java-集合框架

作者:互联网

集合框架

先看个思维导图呗
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.与数组的区别

使用数组的局限性

如果要存放多个对象,可以使用数组,但是数组有局限性。

package charactor;
 
public class Hero {
    public String name;
    public float hp;
    public int damage;
    public Hero() {
    }
    // 增加一个初始化name的构造方法
    public Hero(String name) {
        this.name = name;
    }
    // 重写toString方法
    public String toString() {
        return name;
    }
}
package collection;
import charactor.Hero;
 
public class TestCollection {
    public static void main(String[] args) {
        //数组的局限性
        Hero heros[] = new Hero[10];
        //声明长度是10的数组
        //不用的数组就浪费了
        //超过10的个数,又放不下
        heros[0] = new Hero("盖伦");
        //放不下要报错
        heros[20] = new Hero("提莫");      
    }    
}

ArrayList存放对象

为了解决数组的局限性,引入容器类的概念。
最常见的容器类就是ArrayList。
容器的容量"capacity"会随着对象的增加,自动增长。
只需要不断往容器里增加英雄即可,不用担心会出现数组的边界问题。

package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
	//告诉编译器忽略指定的警告,不用在编译完成后出现警告信息。
    @SuppressWarnings("rawtypes")
    public static void main(String[] args) {
        //容器类ArrayList,用于存放对象
        ArrayList heros = new ArrayList();
        heros.add( new Hero("盖伦"));
        System.out.println(heros.size());
         
        //容器的容量"capacity"会随着对象的增加,自动增长
        //只需要不断往容器里增加英雄即可,不用担心会出现数组的边界问题。
        heros.add( new Hero("提莫"));
        System.out.println(heros.size());    
    }    
}

2.常用方法

add 增加

add 有两种用法
第一种是直接add对象,把对象加在最后面
heros.add(new Hero("hero " + i));

第二种是在指定位置加对象
heros.add(3, specialHero);

package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
    public static void main(String[] args) {
        ArrayList heros = new ArrayList();
 
        // 把5个对象加入到ArrayList中
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        }
        System.out.println(heros);
 
        // 在指定位置增加对象
        Hero specialHero = new Hero("special hero");
        heros.add(3, specialHero);
        System.out.println(heros);
        System.out.println(heros.toString());
    } 
}

在这里插入图片描述
contains 判断是否存在

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

package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
    public static void main(String[] args) {
        ArrayList heros = new ArrayList();
 
        // 初始化5个对象
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        }
        Hero specialHero = new Hero("special hero");
        heros.add(specialHero);
 
        System.out.println(heros);
        // 判断一个对象是否在容器中
        // 判断标准: 是否是同一个对象,而不是name是否相同
        System.out.print("虽然一个新的对象名字也叫 hero 1,但是contains的返回是:");
        System.out.println(heros.contains(new Hero("hero 1")));
        System.out.print("而对specialHero的判断,contains的返回是:");
        System.out.println(heros.contains(specialHero));
    }
}

在这里插入图片描述
get 获取指定位置的对象

通过get获取指定位置的对象,如果输入的下标越界,一样会报错

package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
	public static void main(String[] args) {
        ArrayList heros = new ArrayList();
 
        // 初始化5个对象
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        }      
        Hero specialHero = new Hero("special hero");
        heros.add(specialHero);
        System.out.println(heros);
        //获取指定位置的对象
        System.out.println("下标是5的对象是:"+heros.get(5));
        //如果超出了范围,依然会报错
        System.out.println(heros.get(6));
 
    }
}

在这里插入图片描述
indexOf 获取对象所处的位置

indexOf用于判断一个对象在ArrayList中所处的位置
与contains一样,判断标准是对象是否相同,而非对象的name值是否相等

package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
	public static void main(String[] args) {
        ArrayList heros = new ArrayList();
 
        // 初始化5个对象
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        }      
        Hero specialHero = new Hero("special hero");
        heros.add(specialHero);
        System.out.println(heros);
        //获取指定位置的对象
        System.out.println("下标是5的对象是:"+heros.get(5));
        //如果超出了范围,依然会报错
        System.out.println(heros.get(6));
 
    }
}

在这里插入图片描述
remove 删除

remove用于把对象从ArrayList中删除
remove可以根据下标删除ArrayList的元素
heros.remove(2);
也可以根据对象删除
heros.remove(specialHero);

package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
    public static void main(String[] args) {
        ArrayList heros = new ArrayList();
        // 初始化5个对象
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        }
        Hero specialHero = new Hero("special hero");
        heros.add(specialHero);
         
        System.out.println(heros);
        heros.remove(2);
        System.out.println("删除下标是2的对象");
        System.out.println(heros);
        System.out.println("删除special hero");
        heros.remove(specialHero);
        System.out.println(heros); 
    }
}

在这里插入图片描述
set 替换

set用于替换指定位置的元素

package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
    public static void main(String[] args) {
        ArrayList heros = new ArrayList();
        // 初始化5个对象
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        }
        Hero specialHero = new Hero("special hero");
        heros.add(specialHero);
         
        System.out.println(heros);
        System.out.println("把下标是5的元素,替换为\"hero 5\"");
        heros.set(5, new Hero("hero 5"));
        System.out.println(heros);
    }
}

在这里插入图片描述
size 获取大小

size 用于获取ArrayList的大小

package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
    public static void main(String[] args) {
        ArrayList heros = new ArrayList();
 
        // 初始化5个对象
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        }
        Hero specialHero = new Hero("special hero");
        heros.add(specialHero);
        System.out.println(heros);
        System.out.println("获取ArrayList的大小:");
        System.out.println(heros.size());
    }
}

在这里插入图片描述
toArray 转换为数组

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

package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
    public static void main(String[] args) {
        ArrayList heros = new ArrayList();
 
        // 初始化5个对象
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        }
        Hero specialHero = new Hero("special hero");
        heros.add(specialHero);
        System.out.println(heros);
        Hero hs[] = (Hero[])heros.toArray(new Hero[]{});
        System.out.println("数组:" +hs);
        for(Hero HS:hs){
        	  System.out.print(HS+"  ");
        }
    }
}

在这里插入图片描述
addAll 把另一个容器所有对象都加进来

package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
    public static void main(String[] args) {
        ArrayList heros = new ArrayList();
 
        // 初始化5个对象
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        }
 
        System.out.println("ArrayList heros:\t" + heros);
          
        //把另一个容器里所有的元素,都加入到该容器里来
        ArrayList anotherHeros = new ArrayList();
        anotherHeros.add(new Hero("hero a"));
        anotherHeros.add(new Hero("hero b"));
        anotherHeros.add(new Hero("hero c"));
        System.out.println("anotherHeros heros:\t" + anotherHeros);
        heros.addAll(anotherHeros);
        System.out.println("把另一个ArrayList的元素都加入到当前ArrayList:");
        System.out.println("ArrayList heros:\t" + heros);
         
    }
}

在这里插入图片描述
clear 清空

clear 清空一个ArrayList

package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
    public static void main(String[] args) {
        ArrayList heros = new ArrayList();
 
        // 初始化5个对象
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        }
 
        System.out.println("ArrayList heros:\t" + heros);
        System.out.println("使用clear清空");
        heros.clear();
        System.out.println("ArrayList heros:\t" + heros);    
    }
}

在这里插入图片描述
3.练习

判断是否相同

如果就是要判断集合里是否存在一个 name等于 "hero 1"的对象,应该怎么做?

package charactor;
public class Hero {
    public String name;
    public float hp;
    public int damage;
    public Hero() {
    	System.out.println("Hero的构造方法 ");
    }
    // 增加一个初始化name的构造方法
    public Hero(String name) {
        this.name = name;
    
	// 重写toString方法
    public String toString() {
        return name;
    }
}
package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
	public static void main(String[] args) {
        ArrayList<Hero> heros=new ArrayList();
        
        heros.add(new Hero("Hero 1"));
        heros.add(new Hero("Hero 2"));
        // 初始化5个对象
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        } 
        System.out.println(heros);
        for(int i=0;i<heros.size();i++) {
        	Hero h=heros.get(i);    
        	//System.out.println(h);
            if(h.toString().equals("Hero 1")){
                System.out.println("存在一个名字为Hero 1的对象");
                break;
            }
        }   
    }
}

在这里插入图片描述
MyStringBuffer

做一个一样的MyStringBuffer练习,但是不使用字符数组,而是使用ArrayList来实现。

package collection;
public interface IStringBuffer {
    public void append(String str); //追加字符串
    public void append(char c);  //追加字符
    public void insert(int pos,char b); //指定位置插入字符
    public void insert(int pos,String b); //指定位置插入字符串
    public void delete(int start); //从开始位置删除剩下的
    public void delete(int start,int end); //从开始位置删除结束位置-1
    public void reverse(); //反转
    public int length(); //返回长度
}
package collection;
import java.util.ArrayList;
public class MyStringBuffer implements IStringBuffer {
   
}

标签:Hero,框架,ArrayList,System,heros,new,集合,java,public
来源: https://blog.csdn.net/qq_42878202/article/details/99814582