day16 Java 集合


一个人的时候,在陌生的街头
抬头看着满天繁星的天空






一、集合

1、 包装类

在实际使用中,我们经常会需要使用对象,例如调用方法
但是基本数据类型无法被引用,每次使用时
都需要单独编写方法调用,这不符合面向对象的本质
为此,java 为8个基本数据类型都提供了一个包装类

基本数据类型 包装类类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
		//	将int类型的值转成二进制
		public static String toBinaryString(int i)
		//将int类型的值转成八进制
        public static String toOctalString(int i)
		//将int类型的值转成十六进制
        public static String toHexString(int i)
        
		//输出下界
        public static final int MIN_VALUE
		//输出上界
        public static final int MAX_VALUE

int类型与String类型的相互转换

		// int --> String
//	方式一
		int n = 100;
        String s1 = "" + n;
//	方式二
		String s2 = valueOf(100);
//	方式三
		Integer i = new Integer(n);
        String s3 = i.toString();
//	方式四
		String s4 = Integer.toString(n);

		// String --> int
//	方式一
		Integer i1 = new Integer(string);
		int intI1 = i1.intValue();
//	方式二
		int i = Integer.parseInt(string);



2、 集合

使用数组存储引用类型时,如果需要频繁的改变长度,使用增删功能,都会非常繁琐
能否有一种容器,可以想 StringBuffer 一般,既可以随意改变长度和增删
也能够像数组一样存储各种类型的数据
为此,java 提供了一种容器 —— 集合

3、 特点

类似于 C 语言中的动态数组,集合具有如下的特定
1、长度动态的,可以随着成员的增加而增加
2、一个集合下,可以存放任意引用数据类型(但是为了数据的安全性一般不这么做)
注:存储入集合的基本数据类型会自动转为包装类

Collection: 是集合的顶层接口
针对存放的不同数据类型和数据结构,java 区分出了不同的集合
通过提取他们之间的共性,形成了一个集合的继承体系 Collection
在这里插入图片描述


二、Collection 常用功能

2.1 添加

boolean add(Object obj) :添加一个元素
boolean addAll(Collection c):添加一个集合的元素

		arr1.add("fgh");        //  Object ... = new String("fgh");
        System.out.println(arr1.add("韭菜盒子"));		//	true
        System.out.println(arr1);		//	[fgh, 韭菜盒子]

        arr2.addAll(arr1);
        System.out.println(arr2);		//	[fgh, 韭菜盒子]

2.2 删除

boolean remove(Object o):从该集合中删除指定元素的单个实例(如果存在)
boolean removeAll(Collection c) :删除指定集合中包含的所有此集合的元素
void clear():删除所有元素

		arr1.add("fgh");       
        arr1.add("韭菜盒子");
        arr2.add("fgh");

        arr1.remove("韭菜盒子");
        System.out.println(arr1);		//	[fgh]
        System.out.println(arr1.removeAll(arr2));		//	true
        System.out.println(arr1);		//	[]

2.3 判断

boolean contains(Object o):如果此集合包含指定的元素,则返回 true
boolean containsAll(Collection c) :如果此集合包含指定集合中的所有元素,则返回true
boolean isEmpty()如果此集合不包含元素,则返回 true

		Collection arr1 = new ArrayList();
        Collection arr2 = new ArrayList();
        Collection arr3 = new ArrayList();

        arr1.add("fgh");
        arr1.add("韭菜盒子");

        arr2.add("fgh");
        arr2.add("123");

		System.out.println(arr1.contains("fgh"));		//	trrue
        System.out.println(arr1.containsAll(arr2));		//	false
        System.out.println(arr3.isEmpty());		//	true

2.4 长度

int size():返回此集合中的元素数

		Collection arr1 = new ArrayList();

		arr1.add("fgh");
        arr1.add("韭菜盒子");

		System.out.println(arr1.size());		//	2

2.5 交集

boolean retainAll(Collection c):仅保留此集合中包含在指定集合中的元素(可选操作)
保存于调用方法的对象集合中

        Collection arr1 = new ArrayList();
        Collection arr2 = new ArrayList();

        arr1.add("fgh");
        arr1.add("韭菜盒子");
        arr2.add("韭菜盒子");
        arr2.add("123");
		
        arr1.retainAll(arr2);
        System.out.println(arr1);		//	[韭菜盒子]
        System.out.println(arr2);		//	[韭菜盒子, 123]

2.6 转换数组

Object[] toArray():返回一个包含此集合中所有元素的数组

       	Collection arr1 = new ArrayList();

        arr1.add("fgh");
        arr1.add("韭菜盒子");

		Object[] o = arr1.toArray();
        for(int i = 0;i < o.length;i++){
    
    
            System.out.println(o[i]);
        }
		//	fgh		
		//	韭菜盒子



二、遍历与迭代器

方式一
利用数组转换,循环遍历
注:若需要进一步调用对象方法,需要向下转型

       	Collection arr1 = new ArrayList();

        arr1.add("fgh");
        arr1.add("韭菜盒子");

		Object[] o = arr1.toArray();
        for(int i = 0;i < o.length;i++){
    
    
        	String s = (String)o[i];		//	向下转型
            System.out.println(s + "---" + s.length());
        }
		//	fgh----3
		//	韭菜盒子----4

方式二
利用迭代器,集合元素提取

Iterator iterator() :生成迭代器

boolean hasNext() :判断下一元素指向地址是否为空

E next() :返回下一元素,并且指针指向下一位置

void remove() :删除当前指针指向对象

在迭代器遍历中,不能通过集合去修改元素

注:iterator 迭代器类似一个有头结点的链表

		......
        student s1 = new student("韭菜盒子",19);
        student s2 = new student("宇多田光",18);
        student s3 = new student("柴田淳",17);
        student s4 = new student("手嶌葵",17);

        Collection arr = new ArrayList();

        arr.add(s1);
        arr.add(s2);
        arr.add(s3);
        arr.add(s4);

        Iterator i = arr.iterator();

        while(i.hasNext()){
    
    
            student s = (student) i.next();
            System.out.println(s.getName()+"-----"+s.getAge());
        }
		/*
		韭菜盒子-----19
		宇多田光-----18
		柴田淳-----17
		手嶌葵-----17
		*/



总结

Iterator iterator():生成迭代器
boolean hasNext():判断下一元素指向地址是否为空
E next():返回下一元素
注:迭代器类似一个有头结点的链表

猜你喜欢

转载自blog.csdn.net/qq_41464008/article/details/120709599