为什么要包装类:
基本数据类型使用起来虽然非常方便,但是没有对应的方法来操作这些基本类型的数据,可以使用一个类,把基本类型的数据装起来,在类中定义一些方法,这个类叫做包装类,我们可以使用类中的方法来操作这些基本类型的数据;
基本类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | character |
boolean | Boolean |
从JDK1.5以后,开始支持自动装箱,自动拆箱;
从JDK1.7以后,右侧的尖括号内容可以不写内容,但是<>本身还是要写的。
Collection集合常用功能:
public boolean add(E e);把给定的对象添加到当前集合中; public void
clear();清空集合中的所有的元素; public boolean remove(E e);把给定的对象在当前集合中删除; public
boolean contains(E e);判断当前集合中是否包含给定元素; public boolean
isEmpty();判断当前集合是否为空; public int size();返回集合中元素的个数; public Object[]
toArray();把集合中的元素,存储到数组中;
1、list接口的特点:
- 有序的集合,存储元素和取出元素的顺序是一致的(存储123,取出123);
- 有索引,包含了一些带索引的方法;
- 允许存储重复的元素;
list接口中带索引的方法(特有)
- public void add(int index,E element);将指定的元素添加到该集合中的指定位置上;
- public E get(int index)返回集合中指定位置的元素;
- public E remove(int index);移除列表中指定位置的元素,返回的是被移除的元素;
- public E set(int index,E element);用指定元素替换集合中指定位置的元素,返回值的更新前的元素;
Arraylist
如果ArrayList集合来说,直接打印得到的不是地址值,而是内容;
如果内容为空,得到的是空的方括号[ ];
Arraylist:ArrayList<E> list = new ArrayList<>();
Array List常用方法:
- public boolean add(E e);向集合当中添加元素,参数的类型和泛型一致;
- public E get(int index);向集合当中获取元素,参数是索引编号,返回值就是对应位置的元素;
- public E remove(int index);从集合当中删除元素,参数是索引编号,返回值就是被删除的元素;
public int size();获取集合的尺寸长度,返回值是集合中包含的元素个数;
操作索引的时候,一定要防止索引越界异常;
迭代器
Iterator接口(Ieerator主要用于迭代访问Collection中的元素)
Iterator迭代器是一个接口,我们无法使用,需要使用Iterator接口实现类的对象,获取实现类的方法是使用Collection接口中的方法,这个方法返回的就是迭代器的是实现类对象。
获取集合对应迭代器的方法:public Iterator iterator();
常用方法:
public E next();放回迭代的下一个元素; publicBoolean
hasNext();如果还有元素可以迭代,则返回true;
迭代器的使用步骤:
1.使用集合中的方法Iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
2.使用Iterator接口中的方法hasNext()判断还有没有下一个元素;
3.使用Iterator接口中的方法next取出集合中的下一个元素。
代码实现
public class iter{
public static void main(String[] args){
Collection<String> coll = new ArrayList<>();//创建一个集合对象
coll.add("A boy"); coll.add("can do");
coll.add("everything"); coll.add("for girl");//添加元素
Iterator<String> it = coll.Iterator();
if(it.hasNext()){
String b = it.next();
System.out.println(b);
}
}
}
Linklist集合
- 底层是一个链表结构,查询慢,增删快;
- 里面包含了大量操作首尾元素的方法;
- 注意:使用Linklist集合特有的方法,不能使用多态;
常用方法
添加方法; - public void addFirst(E e);将指定元素插入此列表的开头;
- public void addLast(E e);将指定元素添加到此列表的结尾;
- public void push(E e);将元素插入此列表所表示的堆栈;
获取方法:
- public E getFirst();返回此列表的第一个元素;
- public E getLast();返回此列表的最后一个元素;
删除方法: - public E removeFirst();移除并返回此列表的第一个元素;
- public E removeLast();一处并返回此列表的最后的一个元素;
- public E pop();从此列表所表示的堆栈处弹出一个元素;
- public boolean IsEmpty();如果链表不包含元素,则返回true;
set接口的特点:
- 不允许存储重复的元素;
- 没有索引,没有带索引的方法,也不能使用普通的for循环遍历;
Hashset特点:
- 不允许存储重复的元素;
- 没有索引,没有带索引的方法,也不能使用普通的for循环遍历;
- 是一个无需的集合,存储元素和取出元素的顺序有可能不一样;
- 底层是一个哈希表结构;
- 如果想要存储自定义类型的元素,需要重写hashcode()和equal();
LinkedHashset集合 extends HashSet;
特点:
底层是一个哈希值(数组+链表/红黑树)+链表;多了一条链表(记录元素的存储顺序),保证元素有序;有序不允许重复;
不允许
迭代器的实现原理
增强版for循环:底层使用的也是迭代器,使用for循环的格式,简化了迭代器的书写;
是JDK1.5之后出现的新特性。
Collectionextends Iterator:所有的单列集合都可以使用增强for;
public interface Iterator实现这个接口允许对象成为”foreach“语句的目标;
增强for循环:仅用来遍历集合和数组
格式:
for(集合/数组的数据类型 变量名: 集合名/数组名){
sout(变量名)
}
Collections集合工具类的方法
java.util.Collections 是集合工具类,用来对集合进行操作。部分方法如下:
public static boolean add(Collection c,T… elements):往集合中添加一些元素;
public static void shuffle(List<?> list);打乱顺序;打乱集合的顺序;
public static void sort(list list);将集合中的元素按照默认规则排序;
注意:被存储的集合里边存储的元素,必须实现Comparable接口,从写接口中的方法compareTo定义排序的规则;
自己(this)- 参数:为升序;
public static void sort(list list,Comparator<? super T>);将集合中元素按照指定规则排序;(自己百度了解一下)
Collections.addAll(list,"a","b","c","d","e","f");
//将元素添加到list集合中;
Collections.shuffle(list);//将集合中的元素顺序打乱;
可变参数
在JDK1.5以后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化,…用在参数上,称之为可变参数。
使用前提:
当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数。
使用格式如下:
修饰符 返回值类型 方法名(参数类型… 形参名){ }
其实这个书写完全等价于:
修饰符 返回值类型 方法名(形参类型[ ] 形参名){ }
可变参数的原理
可变藏书底层就是一个数组,根据传递参数个数不同,会创建不同的数组,来存储这些参数;传递的参数个数,可以是0到很多个;
public static void method(int …b){
}