java 基础5

1、接口的特点

(1)接口不能被实例化

(2)接口在JDK1.8之前,只能包含公共的抽象方法,JDK1.8之后,还可以包含静态方法和默认方法

(3)接口中只能有全局的静态的常量

(4)接口中不能有构造器、代码块等

(5)接口用来被实现的,实现类中必须实现接口的所有的抽象方法,否则该实现类也得是抽象类

(6)一个类可以同时实现多个接口,Java支持多实现

(7)一个类如果既要继承父类又要实现接口,先继承后实现

(8)接口与接口之间可以是继承关系,而且支持接口的多继承

(9)接口与实现类的对象之间构成多态引用

 

4、抽象类与接口的区别

(1)抽象类声明的关键字是abstract class,接口声明的关键字是interface

(2)抽象类中可以包含构造器、代码块等其他成员,而接口中只能有公共的抽象方法,默认方法和静态方法

(3)抽象类受到单继承的限制,而接口支持多实现,不受单继承的限制

 

抽象类与接口相同点:都不能实例化

 

5、JDK1.8接口的新特性

静态方法和默认方法

 

注解相当于一个标记 经常和反射使用在一起

 

String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:

     String str = "abc";

 等效于:

     char data[] = {'a', 'b', 'c'};

     String str = new String(data);

 

 

字符串String的特点

1String是个final

2String是不可变的字符序列

private意味着外面无法直接获取字符数组、final意味着字符数组的引用不可改变。

但是因为String也没有提供修改value数组某元素值的途径,因此字符串的字符数组内容也不可变了。

 

String对象的创建

String  s1 = new String();   //  本质上  this.value = new char[0];

String  s2 = new String(String original);  //this.value = original.value;

String  s3 = new String(char[] a);  //this.value = Arrays.copyOf(value, value.length);

String  s4 = new String(char[] a,int startIndex,int count)

 

String的拼接

 

1、常用方法系列之一

  •  

    length()返回字符串的长度: return value.length;

  •  

    isEmpty() 判断是否是空字符串:return value.length == 0;

  •  

    toLowerCase()使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

  •  

    toUpperCase()使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

  •  

    trim()返回字符串的副本,忽略前导空白和尾部空白。

  •  

    equalsIgnoreCase(String anotherString)与equals方法,忽略大小写

  •  

    equals(Object obj)比较字符串的内容

 

 

 

2、和字符相关

charAt(int index): 返回某索引处的字符return value[index];

char[] toCharArray():将此字符串转换为一个新的字符数组

 

 

3.String类判断是否以指定内容开头或结尾

5String类替换操作

 

 

 

6String类字符串截取操作

 

7String类字符串拆分操作

8String类字符串查找操作

 

 

 

日期

 

 

进行数组的排序 

①在类的定义的时候重写compareTo()方法

@Override

     public int compareTo(Object o) {

          Goods other = (Goods) o;

          if(this.price > other.price){

              return 1;

          }else if(this.price < other.price){

              return -1;

          }

          return 0;

     }

 

②定义Comparator方法

Arrays.sort(all , new Comparator() {

              @Override

              public int compare(Object o1, Object o2) {

                   Goods g1 = (Goods) o1;

                   Goods g2 = (Goods) o2;

                   

                   return Collator.getInstance(Locale.CHINA).compare(g1.getName(),g2.getName());

              }

          });

  •  

    Collection接口:定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式

    •  

      Set:中的数据对象没有顺序且不可以重复

    •  

      List:中的数据对象有顺序且可以重复

  •  

    Map接口定义了存储键(key)-值(value)映射对的方法

 

 

Collection接口

Collection 层次结构 中的根接口。

常用方法:

1、添加

(1)add(Object obj)

(2)addAll(Collection coll)

 

2、获取有效元素的个数

int size()

 

3、清空集合

void clear();

 

4、是否包含某个元素

(1)boolean contains(Object obj):是通过元素的equals方法来判断是否是同一个对象

 

coll.add("柴林燕");

coll.contains("柴林燕")  true

本质上是拿集合中的元素与”柴林燕”比较,如果存在就会出现"柴林燕".equals("柴林燕")所以返回true,因为String类对equals进行了重写,表示比较的字符串的内容

 

coll.add(new Student("柴林燕"))

coll.contains(new Student("柴林燕")) false

本质上调用new Student("柴林燕").equals(new Student("柴林燕"))

用的是Student类中equals,而这个没有重写equals,用的是父类Object的equals,默认比较的是地址值和“==”等价,所以返回false

 

(2)boolean containsAll(Collection c)也是调用元素的equals方法来比较的。拿两个集合的元素挨个比较。

 

5、是否空集合

 boolean isEmpty()

 

 6、删除

 (1) boolean remove(Object obj) 通过元素的equals方法判断是否是要删除的那个元素

  只会删除找到的第一个元素

    只是把元素从集合删除,内存中还是存在的。

 (2)boolean removeAll(Collection coll)

 

 7、取两个集合的交集

 boolean retainAll(Collection c)

 把交集的结果存在当前集合中,不影响c

 

 8、转成对象数组

 Object[] toArray()

iterator迭代

Iterator iter = coll.iterator();//多态引用

while(iter.hasNext()){

Object obj = iter.next();

System.out.println(obj);

}

Iterator iter = coll.iterator();//回到起点

while(iter.hasNext()){

Object obj = iter.next();

if(obj.equals("李四")){

iter.remove();

}

}

注意:Iterator可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove方法,不是集合对象的remove方法

 

 

 

List接口

  •  

    List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。

  •  

    List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

  •  

    JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。

List接口的方法

List的实现类

  •  

    List除了从Collection集合继承的方法外,List 集合里添加了一些根据索引来操作集合元素的方法

    •  

      void add(int index, Object ele)

    •  

      boolean addAll(int index, Collection eles)

    •  

      Object get(int index)

    •  

      int indexOf(Object obj)

    •  

      int lastIndexOf(Object obj)

    •  

      Object remove(int index)

    •  

      Object set(int index, Object ele)

    •  

      List subList(int fromIndex, int toIndex)

  • ArrayList:底层实现是数组,线程不安全,效率高,所以,查询块,修改、插入、删除慢

  • LinkedList:底层实现是链表,线程不安全,效率高。所以,查询慢,修改、插入、删除快

  • Vector:底层实现是数组,线程安全,效率低。但是即使为保证 List 集合线程安全,也不推荐使用Vector

ArrayList与Vector的区别?

  •  

    底层都是数组,默认初始容量都是10.

  •  

    ArrayList扩容增加原来的50%,Vector扩容增加原来的1倍。

  •  

    ArrayList线程不安全,效率高,Vector线程安全,效率低。

Vector因为版本古老,支持Enumeration 迭代器。但是该迭代器不支持快速失败。

LinkedList的特点

LinkedList:双向链表,除了保存数据,还定义了两个变量:

prev变量记录前一个元素的位置

next变量记录下一个元素的位置

 

 

对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高。新增方法:

  •  

    void addFirst(Object obj)

  •  

    void addLast(Object obj)    

  •  

    Object getFirst()

  •  

    Object getLast()

  •  

    Object removeFirst()

  •  

    Object removeLast()

 

Set接口

 

HashSet

  •  

    HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。

  •  

    HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。

  •  

    HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。

    •  

      当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值,通过某种散列函数决定该对象在 HashSet 中的存储位置。(这个散列函数会与底层数组的长度相计算得到在数组中的下标,并且这种散列函数计算还尽可能保证能均匀存储元素,越是散列分布,该散列函数设计的越好)

    •  

      如果两个元素的hashCode()值相等,会再继续调用equals方法,如果equals方法结果为true,添加失败,如果为false,那么会保存该元素,但是该数组的位置已经有元素了,那么会通过链表的方式继续链接。

  •  

    HashSet 具有以下特点:

    •  

      不能保证元素的排列顺序

    •  

      HashSet 不是线程安全的

    •  

      集合元素可以有一个是 null

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值