Java学习笔记之集合

我的Java学习笔记

集合



1.集合框架

1.1存在了数组为什么要使用集合?

​ 1 数组的长度是不可变的

​ 2 数组是存储相同数据类型的

​ 3 数组中删除数据后 当前位置为空 不利于后续的操作

1.2 集合框架图

在这里插入图片描述

2.ArrayList集合使用

2.1添加元素

ArrayList 类提供了很多有用的方法,添加元素到 ArrayList 可以使用 add() 方法:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        sites.add(1,"Baidu")//把数据插入到指定位置
        System.out.println(sites);
    }
}
2.2 访问元素

访问 ArrayList 中的元素可以使用 get() 方法:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites.get(1));  // 访问第二个元素
    }
}
2.3 修改元素

如果要修改 ArrayList 中的元素可以使用 set() 方法:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值
        System.out.println(sites);
    }
}
2.4 删除元素

如果要删除 ArrayList 中的元素可以使用 remove() 方法:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        sites.remove(3); // 删除第四个元素
        System.out.println(sites);
        sites.remove("Weibo"); //删除指定元素
    }
}
2.5 获取长度

如果要计算 ArrayList 中的元素数量可以使用 size() 方法:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites.size());
    }
}
2.6 迭代数组列表

我们可以使用 for 来迭代数组列表中的元素:

import java.util.ArrayList;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        //普通for循环
        for (int i = 0; i < sites.size(); i++) {
            System.out.println(sites.get(i));
        }
        //增强for循环
        for (String i : sites) {
            System.out.println(i);
        }
    }
}
2.7 判断集合是否为空
public class Test {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("毛毅");
		list.add("吴志文");
		list.add("刘昊冰");
		list.add("董洪成");
		list.add("冯超");
		System.out.println(list.isEmpty());
	}
}
2.8 集合中是否包含
public class Test {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("xx");
		list.add("xxx");
		list.add("xxx");
		list.add("xxx");
		list.add("xx");
		System.out.println(list.contains("xx"));
	}
}
2.9 泛型的使用
public class Test {
	public static void main(String[] args) {
        //泛型的使用规定了集合中存储的数据类型
		List<String> list = new ArrayList<String>();
		list.add("xx");
		list.add(123); //编译错误
		list.add(boolean);//编译错误
		list.add(5.5);//编译错误
		list.add("xx");
	}
}

3.LinkedList , ArrayList区别

3.1、数据结构不同

ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。

3.2、效率不同

当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。

当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。

4.HashSet

4.1 实例化HashSet并且使用

public class HashSetTest {
	public static void main(String[] args) {
		HashSet<String> hashSet = new HashSet<String>();
        //add(Objet obj) 插入数据到尾部 
		hashSet.add("张三");
		hashSet.add("李遂");
		hashSet.add("毛毅");
		//remove(Object obj)  删除指定元素
        hashSet.remove("张三");
		for (String string : hashSet) {
			System.out.println(string);
		}
	}
}

4.2 HashSet的特点

​ hashset相对于插入顺序来说是无序的。但是hashSet会被所有的插入的数据进行排序,相对于本身来说是有序的。

​ hashSet中的数据不可重复

​ hashSet允许为空值(null)

5.TreeSet

​ 5.1 TreeSet的使用

public class TreeSetTest {
	public static void main(String[] args) {
		TreeSet<String> treeSet = new TreeSet<String>();
		treeSet.add("CHINA");
		treeSet.add("CHINA");
		treeSet.add("CHINESE");
		treeSet.add("USA");
		treeSet.add("JAPAN");
		for (String string : treeSet) {
			System.out.println(string);
		}
	}
}

​ 5.2 Treeset的特点

​ 底层使用tree进行存储

​ 因为treeset本身要做排序操作,所以相对于插入顺序来说是无序的。

​ 插入的数据不可能重复

​ 不能插入空值(null)

6.Collections工具类

​ Collections和Collection区别

​ Collection是集合顶层接口

​ Collections是针对集合一个工具类,提供了一些方法来操作集合,此类中的方法都是静态的

6.1 sort方法

public class ColletionsTest {
	public static void main(String[] args) {
		ArrayList<Integer> listint = new ArrayList<Integer>();
		listint.add(5);
		listint.add(4);
		listint.add(9);
		listint.add(55);
		listint.add(2);
		Collections.sort(listint);
		for (Integer integer : listint) {
			System.out.println(integer);
		}
		ArrayList<String> liststring = new ArrayList<String>();
		liststring.add("A");
		liststring.add("a");
		liststring.add("e");
		liststring.add("b");
		liststring.add("g");
		liststring.add("B");
		Collections.sort(liststring);
		for (String string : liststring) {
			System.out.println(string);
		}
	}
}
//sort方法重载两个具体的方法
// sort(List list) 对List接口下的所有的实现类进行排序 
// 但是只能对基本数据类型的包装类和String进行排序
// sort(List list,Comparator com) 使用比较器进行排序 在标题7中详细讲解

6.2 reverse方法
public class ColletionsTest {
	public static void main(String[] args) {
		ArrayList<String> liststring = new ArrayList<String>();
		liststring.add("A");
		liststring.add("a");
		liststring.add("e");
		liststring.add("b");
		liststring.add("g");
		liststring.add("B");
		// 对集合中的元素进行反转
		Collections.reverse(liststring);
		for (String string : liststring) {
			System.out.println(string);
		}
	}
}
6.3 shuffle方法
public class ColletionsTest {
	public static void main(String[] args) {
		ArrayList<String> liststring = new ArrayList<String>();
		liststring.add("A");
		liststring.add("a");
		liststring.add("e");
		liststring.add("b");
		liststring.add("g");
		liststring.add("B");
		// 打乱集合中的顺序
		Collections.shuffle(liststring);
		for (String string : liststring) {
			System.out.println(string);
		}
	}
}

7.使用Collections工具类对ArrayList排序

Collections工具类中的sort无法对自定义对象进行排序,所以需要手动完成排序。

7.1 Comparable接口
public class Emp implements Comparable<Emp> {
	
	
	@Override
	public int compareTo(Emp o) {
		// TODO Auto-generated method stub
		return (int)(o.emoney-this.emoney);
	}
}
7.2 Comparator接口
//创建一个比较类实现Comparator接口
public class EmpComparator implements Comparator<Emp> {

	@Override
	public int compare(Emp emp, Emp emp2) {
		// TODO Auto-generated method stub
		return (int)(emp.getEmoney()-emp2.getEmoney());
	}
}
//使用sort方法
//sort(List list,Comparator com) 使用比较器进行排序
public static void main(String[] args) {
		ArrayList<Emp> list = new ArrayList<Emp>();
		EmpComparator ec = new EmpComparator();
		Emp emp = new Emp(101, "xx", 18000);
		Emp emp2 = new Emp(102, "老曹", 860);
		Emp emp3 = new Emp(103, "xxx", 1800000);
		list.add(emp);
		list.add(emp2);
		list.add(emp3);
		Collections.sort(list, ec);//完成排序
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值