文章目录
一个人的时候,在陌生的街头
抬头看着满天繁星的天空
一、集合
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():返回下一元素
注:迭代器类似一个有头结点的链表