Day15 又是效率高的一整天
注解后面学到框架的时候回来再看。
JDK内置的三个基本注解
@Override:限定重写父类方法,该注解只能用于方法
@Deprecated:表示所写的东西过时了。
@SuppressWarning :抑制编译器警告
自定义注解
-
参照SuppressWarning 定义。
-
自定义注解通常会指明两个元注解:一是Retention,二是Target
public @interface MyAnnotaion {
//内部定义成员,通常用value表示。
String value() default "hello";//这是个属性,不是方法。
//default可以指定成员的默认值
//如果自定义的注解没有成员,表明是一个标识作用1
//如果注解有成员,在使用注解的时候,就要指明成员的值
}
元注解:对现有的注解进行解释说明的注解。
-
Retention:指明所修饰的注解的生命周期。一共有三种状态(SOURCE,CLASS,RUNTIME)
SOURCE 编译完后丢弃,不在class文件里,反射获取不到
CLASS是个默认行为,编译完在class文件,但允行时不在了,反射获取不到
RUNTIME:只有声明为RUNTIME生命周期的注解,才能通过反射获取
-
Target:指明所修饰的注解能用于那些程序元素。、
-
Documented:表示所修饰的注解在javadoc解析时,保留下来。
-
Inherited:被它修饰的Annotation将具有继承性。
-
可重复注解
Repeatable(MyAnnotations.class)。
1.在MyAnnotaion上声明@Repeatable,成员值(MyAnnotations.class)。
2.MyAnnotation的Target和Retention和MyAnnotaions相同。
类型注解
集合框架
一、集合的概述
-
集合、数组都是对多个数据进行存储操作的结构,简称 Java容器。
说明:此时的存储,主要指的是内存层面的存储,不涉及到持久的存储。
-
数组存储多个数据方面的特点:
一旦初始化以后,其长度就确定了
数组一旦定义好,其元素的类型也就确定好了。如String[]、int[]
-
缺点:
1.长度不可变。
2.数组中提供的方法非常有限,对于添加,删除,插入数据,非常不方便,同时效率不高。
3.获取数组中实际元素的个数的需求,数组没有线程的属性或方法可用。
4.数组存储的特点是:有序,可重复,对于无序,不可重复的需求,不能满足。
二、集合框架
-
Collection 接口:单列集合,用来存储一个一个的对象
List接口:存储有序的,可重复的数据,"动态"数组。
ArrayList、LinkedList、Vector
Set接口:存储无序的,不可重复的数据。"高中讲的集合"
HashSet、LinkedHashSet、TreeSet
-
Map接口:双列集合,用来存储一堆(key ---value)一对数据。 "高中函数y=f(x)"
HashMap、LinkedHashMap、TreeMap、Hashtable、Properties。
Collection接口中的方法
public class collectionTest {
@Test
public void test1() {
Collection coll =new ArrayList();
//add(Object e):将元素e添加到集合coll中
coll.add("aa");
coll.add("shabi");
coll.add("啥比");
coll.add(123);
coll.add(new Date());
//size():获取添加的元素个数
System.out.println(coll.size());//5
//addAll(Collection coll1):将coll1集合中的元素添加到当前的集合中。
Collection coll1 =new ArrayList();
coll1.add(123);
coll1.add("sss");
coll1.add("AAA");
coll.addAll(coll1);
System.out.println(coll.size());//8
System.out.println(coll);//这里调用了实现类的Arraylist()里的toString
//isEmpty():判断当前集合是否为空
System.out.println(coll.isEmpty());//size ==0是为空
//clear():清空集合,对象在,没有数据了而已。
coll.clear();
System.out.println(coll);//清空集合后,返回一个空集合[]
}
}
Collection接口常用方法
package com.sorrymaker.CollectionTest;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
* 向Collection接口的实现的对象中添加数据obj时,要求obj所在的类要重写equals().
* equals()是用来比较两个对象的的内存地址
* 为什么要在我们自己的类中重写equals()?
* 但是有时候我们不满足于使用基本数据类型和Java实现的一些继承自Object的哪些类,
* 比如我们实现一个Person类,它是继承自Object类的,所以它的equals()方法默认
* 使用的是文章开头提到的哪个equals()方法,当我们使用equals()进行比较的时候,
* 比较内存地址,那么有可能出现两个Person对象的参数都相同(比如年龄,身份证号等,
* 在我们的实际认知中认为这两个人就是一个人,应该返回true),但是由于他们的内存地址是不一样的,
* 所以equals()方法会返回false,那么我们就需要去重写equals()方法。
*/
public class collectionTest1 {
@Test
public void test1(){
Collection coll =new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new String("tom"));
coll.add(false);
coll.add(789);
// Person p = new Person("Jerry",20);
// coll.add(p);
coll.add(new Person("Jerry",20));
//1.contains(Object obj);判断当前集合中是否包含obj
//判断时会调用obj对象所在类的equals()方法。
boolean contains = coll.contains(123);
System.out.println(contains);
System.out.println(coll.contains(new String("tom")));
// System.out.println(coll.contains(p));//True
System.out.println(coll.contains(new Person("Jerry", 20)));//false
System.out.println("=============================");
//2.containsALL(Collection coll1):判断形参coll1中的所有元素是否存在于当前集合中
Collection coll1 = Arrays.asList(123,456,000);
System.out.println(coll.containsAll(coll1));
}
@Test
public void test2(){
//3.remove(Object obj):
Collection coll =new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add(new String("tom"));
coll.add(false);
// coll.remove(123);
// System.out.println(coll);
coll.remove(new Person("Jerry",20));
System.out.println(coll);
//4.removeAll(Collection coll1)差集,从当前集合中移除coll1中所有元素。
Collection coll1 =Arrays.asList(123,4566);
coll.removeAll(coll1);
System.out.println(coll);
}
@Test
public void test3(){
Collection coll =new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add(new String("tom"));
coll.add(false);
//5.retainAll(Collection coll)交集:获取当前集合coll集合的交集,并返回给当前集合。
// Collection coll1 =Arrays.asList(123,456,789);
// coll.retainAll(coll1);
// System.out.println(coll);
//6.equals(Object obj);要想返回True,需要当前集合和形参集合的元素都相同
Collection coll1 =new ArrayList();
coll1.add(456);
coll1.add(123);
coll1.add(new Person("Jerry",20));
coll1.add(new String("tom"));
coll1.add(false);
System.out.println(coll.equals(coll1));
}
@Test
public void test4(){
Collection coll =new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add(new String("tom"));
coll.add(false);
//7.hashCode();返回当前对象的哈希值
System.out.println(coll.hashCode());
//8.集合--->数据。toArray()
Object[] arr = coll.toArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
//拓展,数组--->集合。asList(),调用Arrays类的静态方法asList()
List<String> list = Arrays.asList(new String[]{"aa", "bb", "cc"});
System.out.println(list);
List arr1 = Arrays.asList(new int[]{123, 456});//将这里识别为一个元素了。这里是可变形参。
System.out.println(arr1);//[[I@5b80350b]
List arr2 = Arrays.asList(new Integer[]{123,456});//用了Integer,就可以始别出来这里有两个元素了
System.out.println(arr2);//[123, 456]
//9.iterator();返回Iterator接口的实例,用于遍历集合元素,放在IteratorTest.java中。
}
}
补充:
比较thorw和throws差异
上面是排污,下面是治污
throws:处理异常的方式,使用在方法声明处的末尾<->try -catch-finally。
例如:public void test() throws Exception{
}
同步监视器:俗称锁,任何一个类的对象可以充当锁,多个线程共用一把锁
共享数据,多个线程共同操作的数据,即为共享数据。

浙公网安备 33010602011771号