本帖最后由 小石姐姐 于 2018-1-5 09:18 编辑
集合&迭代器
#Collection中的常用功能
*Boolean add(Object e):向集合中添加元素
*void clear():清空集合中所有的元素
*Boolean contains(Object o):判断集合中包含某个元素
*boolean isEmpty():判断集合中的元素是否为空
*boolean remove(Object o): 根据元素的内容来删除某个元素
*int size():获取集合的长度
*Object[] toArray():将集合转换成数组并把集合中的元素存储到数组中
#迭代器
java中提供了很多集合,它们存储元素时,采用的存储方式不同,我们要取出这些集合的元素,可通过一个通用的方式来完成。
Collection集合元素的通用获取方式:在获取元素之前先判断集合有没有元素,如果有就把元素取出来,继续判断,如果还有就继续取出来,一直把集合中的所有元素取出来,这种方式我们的专业术语称之为迭代器。
集合中把这些取元素的方式描述在Iterator接口中,Iterator接口的常用方式如下:
&hasNext()方法:判断集合中是否有元素可以迭代。
&next()方法:用来返回迭代的下一个元素,并把指针移动到下一位。
#并发修改异常
并发修改异常发生的异常原因:
当使用迭代器遍历集合时,对集合中的元素进行增加和删除,改变集合的长度,就会发生并发修改异常
#增强for&泛型
泛型的引入:我们知道集合中可以存放任意对象,然后都会被提升为Object,我们取出每个对象对其操作时,必须进行类型转换,泛型的引入可以避免类型的问题。
#增强for
增强for专门用来遍历数组和集合的,它的内部是存在迭代器的原理的,不要对集合进行增删操作。
格式: for(元素的类型 变量:集合或者数组对象) { 可以直接使用变量; } package cn.itheima_04; import java.util.ArrayList; import java.util.Collection; Collectoin的子体系list 有序的(存储和读取的顺序是一致的) 有整数索引 允许重复的 package cn.itheima_04; import java.util.ArrayList; import java.util.List; /* * list的特有功能: * 增 void add(int index, E element) * 删 E get(int index * 改 E remove(int index * 查 E set(int index, E element) */ public class Test_12 {
public static void main(String[] args) { //创建列表对象 List<String> list = new ArrayList<String>(); //增 void add(int index, E element)在指定的索引出添加指定的元素 list.add(0,"java");
list.add(1,"hello");
list.add(0,"world"); //删 E get(int index)通过索引获取元素 System.out.println(list.get(2)); //改 E remove(int index)删除指定索引上的元素 System.out.println(list.remove(1)); //查 E set(int index, E element)把指定索引上的元素进行修改 System.out.println(list.set(0, "play"));
System.out.println(list); } } LinkedList的特有功能: package cn.itheima_04; import java.util.LinkedList; /* * List的常用子类: * ArrayList * 底层是数组结构 查询快 增删慢 * LinkedList * 底层的结构是链表 查询慢 增删快 * 什么情况该选择哪种方式使用 * 需要查询多的时候选择ArrayList,反之选择LinkedList * * LinkedList的特有功能: * void addFirst(E e) 将指定元素插入此列表的开头。 * void addLast(E e) 将指定元素添加到此列表的结尾 * E getFirst() 返回此列表的第一个元素。 * 。 E getLast() 返回此列表的最后一个元素 * E removeFirst() 移除并返回此列表的第一个元素。 * E removeLast() 移除并返回此列表的最后一个元素 /* * 使用HashSet对字符串存储和遍历 * * 遍历Set有三种方式:转数组,迭代器,增强for(Set没有索引) * 遍历list有四种:转数组,迭代器,增强for,普通for循环 * * Iterator-----hasNext---next * * Set集合的特点: * 1:无序 * 2:不允许重复,元素是唯一的 * 注意:List是允许重复的,返回值永远为true */ public class Test_02 {
public static void main(String[] args) { //创建HashSet对象 HashSet<String> hs = new HashSet<String>(); //Set<String> set = new HashSet<String>();//父类接口指向子类对象,这个是接口,这个两个创建对象都可以
//添加字符串 System.out.println(hs.add("hello")); System.out.println(hs.add("hello")); hs.add("world"); hs.add("helloworld"); //遍历方式 //转数组 Object[] array = hs.toArray(); //遍历数组 /*for (Object object : array) {
System.out.println(object);
}*/ for (int i = 0; i < array.length; i++) {
System.out.println(array); }
System.out.println("----------"); //迭代器 Iterator<String> iterator = hs.iterator(); //while判断 while(iterator.hasNext()) { String string = iterator.next(); System.out.println(string); }
System.out.println("-------------"); //增强for for (Object object : array) {
System.out.println(object); }
} } package com.itheima; import java.util.HashSet;
#IO流
#File类的构造函数
*File(String pathname):将一个字符串对象封装成File类对象
*File(String Parent,String Child):传入一个父级对象和子级对象
*Boolean exists():判断指定路径或者文件夹是否存在
*Boolean isAbsolute():判断当前路径是否是绝对路径
*File getAbsoluteFile():获取文件的绝对路径,返回File对象
*String getAbsolutePath():获取文件的绝对路径,返回路径的字符串
*String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径
*File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径
*String getName():获取文件或文件夹的名称
*String getPath():获取File对象中封装的路径
*long lastModified():以毫秒值返回最后修改时间
*long length():返回文件的字节数
*boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径
多线程
A:进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
B:线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
C:简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
什么是多线程呢?即就是一个程序中有多个线程在同时执行。
A:创建线程的步骤:
1.定义一个类继承Thread。
2.重写run方法。
3.创建子类对象,就是创建线程对象。
4.调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法
实现线程二:实现Runnable接口
创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程。
为何要实现Runnable接口,Runable是啥玩意呢?继续API搜索。
查看Runnable接口说明文档:Runnable接口用来指定每个线程要执行的任务。包含了一个 run 的无参数抽象方法,需要由接口实现类重写该方法。
创建线程的步骤。
1、定义类实现Runnable接口。
2、覆盖接口中的run方法。。
3、创建Thread类的对象
4、将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
5、调用Thread类的start方法开启线程。
|