概述
先来一张Java中的集合框架图 由上图可知,Java集合框架包含三大块内容:对外的接口、接口的实现、对集合运算的算法。总结成一个表格:
List接口
List接口有两个实现,分别是:
ArrayList
特点:
存储方式与数组相同,允许重复、有序,但是数组的长度不可变,ArrayList集合长度可以改变,默认大小是10。优点:遍历元素和随机访问元素的效率比较高。
存储方式示意图:
常用方法
LinkedList
特点:
采用链表存储方式。优点:插入、删除元素时效率较高。
存储方式示意图:
LinkedList集合中的每个元素是通过地址互相连接,比如:第2个元素的地址就在第一个数据中存储着,方便找到,惊醒插入、删除。
常用方法
Map接口
HashMap集合
特点:
存储一组成对的键-值对象,可供key(键)到value(值)的映射。优点:查询指定元素效率高。
常用方法
迭代器Iterator
所有集合接口和类都没有提供相应的遍历方法,而是把遍历交给迭代器Iterator完成。Iterator为集合而生,专门实现集合的遍历。Iterator有两个方法可以实现遍历: 1,boolean hasNext():判断是否存在另一个可访问的元素。 2,Object next():返回要访问的下一个元素。 来个小案例:
public abstract class Pet {
protected String name = "无名氏";
protected int health = 100;
protected int love = 0;
public Pet(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
/** * 输出宠物信息 */
public void print(){
System.out.println("宠物的自白:\n我的名字叫"+this.name+",健康值是"+this.health+
",和主人的其密度是"+this.love+"。");
}
/** * 抽象方法eat(),负责宠物吃饭功能 */
public abstract void eat();
}
public class Dog extends Pet{
public String strain;//品种
public Dog(String name,String strain){
super(name);
this.strain = strain;
}
/** * 重写父类的print方法 */
public void print(){
super.print();
System.out.println("我是一只:"+this.strain+"。");
}
/** * 实现狗狗吃饭的方法 */
public void eat(){
super.health +=3;
System.out.println("狗狗"+super.name+"吃饱了,健康值增加3。");
}
/** * 实现飞盘功能 */
public void catchingFlyDisc(){
System.out.println("狗狗"+super.name+"正在接飞盘");
super.health+=10;
super.love+=5;
}
}
public class Test5 {
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建4个狗狗对象
Dog ououDog = new Dog("偶偶", "雪瑞纳1");
Dog yayaDog = new Dog("丫丫", "雪瑞纳2");
Dog meimeiDog = new Dog("美美", "雪瑞纳3");
Dog feifeiDog = new Dog("菲菲", "雪瑞纳4");
//创建Map集合对象并把多个狗狗对象放入其中
Map dog = new HashMap();
dog.put(ououDog.getName(), ououDog);
dog.put(yayaDog.getName(), yayaDog);
dog.put(meimeiDog.getName(), meimeiDog);
dog.put(feifeiDog.getName(), feifeiDog);
//通过迭代器依次输入集合中所有狗狗的信息
Set keys = dog.keySet();//拿到集合中所有key的集合
Iterator iterator = keys.iterator();//获取Iterator对象
while (iterator.hasNext()) { //判断是否存在可访问的元素
String keyString = (String)iterator.next();//拿到迭代器中的key值
Dog dog2 = (Dog)dog.get(keyString);//根据key取出对应的值
System.out.println(keyString+"\t"+dog2.strain);
}
}
}
运行结果是: <font size="3"> 丫丫 雪瑞纳2 偶偶 雪瑞纳1 菲菲 雪瑞纳4 美美 雪瑞纳3 </font>
Set接口
HashSet集合
特点:
优点:HashSet具有去重功能。
public class Demo01 {
/** * Set集合 特点: 无序(没有下标)、集合中的元素不重复 hashset具有去重功能 */
public static void main(String[] args) {
// 创建一个hashset 保存 f f a a b b d d
HashSet<String> set = new HashSet<>();
set.add("f");
set.add("f");
set.add("a");
set.add("a");
set.add("b");
set.add("b");
set.add("d");
set.add("d");
// 增强for循环
for (String string : set) {
System.out.println(string);// 打印结果 a b d f ,去重且无序(不是按照输出顺序打印)
}
}
}
a
b
d
f
集合和数组的区别
1.数组可以存储基本数据类型和对象,而集合中只能存储对象(可以以包装类形式存储基本数据类型)。 2. 数组长度固定,集合长度可以动态改变 3. 定义数组时必须指定数组元素类型,集合默认其中所有元素都是Object。 4. 不能直接获取数组中实际存储元素的个数,length用来获取数组的长度。集合可以通过size()获取集合中实际存储的元素个数。 5. 集合以借口和类的形式存在,就有封装、继承、多态等类的特性。
本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/qq_46540738/article/details/112724899