黑马程序员 JAVA编程之API学习笔记

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
API的概念就是应用程序编程接口。

String类:在java.lang(java的核心包)中,这个类是对字符串进行了对象的封装。使用这个类我们可以对字符串进行方便的处理。
字符串被初始化后就不可以被该改变,它是被存放在方法区的常量池中。

通过查看API文档,发现String这个类有很多的构造方法。
String str1 = new String();//创建一个空内容的字符串
String str2 = null;//str2没有指向任何对象,是null。
String str3 = "";//str3指向了一个具体的无内容的空字符串对象
String str4 = new String("haha");//str4指向了一个内容为haha的字符串对象
String str5 = "heihei";//直接赋值,通常都用这种用法。
通过构造方法,可以直接将一个字符数组转成字符串。
new String(char[]);
还可以将字符数组中的一部分转换成字符串的形式。
new String(char[],offset,count);

String的常用方法:
length()返回一个字符串的长度:
String str = "abcd";
int len = str.length();
lenj就等于4
equals(Object anObject) :将此字符串与指定的对象比较。
String str = "abcd";
str.equals("abc")//比较str和“abc”里面的内容是否相同,此处返回的应该是false

charAt(int index) :返回指定索引处的 char 值。
compareTo(String anotherString)  :按字典顺序比较两个字符串。
concat(String str) :将指定字符串连接到此字符串的结尾。
endsWith(String suffix) :测试此字符串是否以指定的后缀结束。
getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
hashCode() :返回此字符串的哈希码。
indexOf(int ch) :返回指定字符在此字符串中第一次出现处的索引。
isEmpty() :当且仅当 length() 为 0 时返回 true。
replace(char oldChar, char newChar) :返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
split(String regex) :根据给定正则表达式的匹配拆分此字符串。
toCharArray() :将此字符串转换为一个新的字符数组。
toUpperCase() :使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
trim():返回字符串的副本,忽略前导空白和尾部空白。

/* 给定一个字符串数组。按照字典顺序进行从小到大的排序。
* {"nba","abc","cba","zz","qq","haha"}

* 思路:
* 1,对数组排序。可以用选择,冒泡都行。
* 2,for嵌套和比较以及换位。
* 3,问题:以前排的是整数,比较用的比较运算符,可是现在是字符串对象。
*   字符串对象怎么比较呢?爽了,对象中提供了用于字符串对象比较的功能。
*/
public class StringTest_1 {
public static void main(String[] args) {
String[] arr = { "nba", "abc", "cba", "zz", "qq", "haha" };
printArray(arr);
sortString(arr);
printArray(arr);
}
public static void sortString(String[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if(arr[i].compareTo(arr[j])>0)//字符串比较用compareTo方法
swap(arr,i,j);
}
}
}
private static void swap(String[] arr, int i, int j) {
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void printArray(String[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i != arr.length - 1)
System.out.print(arr[i] + ", ");
else
System.out.println(arr[i] + "]");
}
}

StringBuffer:就是字符串缓冲区。
用于存储数据的容器。
特点:
1,长度的可变的。 
2,可以存储不同类型数据。
3,最终要转成字符串进行使用。
4,可以对字符串进行修改。

既然是一个容器对象。应该具备什么功能呢?
1,添加:
StringBuffer append(data);
StringBuffer insert(index,data);
2,删除:
StringBuffer delete(start,end):包含头,不包含尾。
StringBuffer deleteCharAt(int index):删除指定位置的元素 
3,查找:
char charAt(index);
int indexOf(string);
int lastIndexOf(string);
4,修改:
StringBuffer replace(start,end,string);
void setCharAt(index,char);

增删改查  C(create)U(update)R(read)D(delete) 

jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder

不同的是:
StringBuffer是线程同步的。通常用于多线程。
StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。

jdk升级的目的:
1,简化书写。
2,提高效率。
3,增加安全性。

集合类的由来:
对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定。
就使用集合容器进行存储。

集合特点:
1,用于存储对象的容器。
2,集合的长度是可变的。
3,集合中不可以存储基本数据类型值,集合中存放的是对象。 

集合容器因为内部的数据结构不同,有多种具体容器。
不断的向上抽取,就形成了集合框架。

框架的顶层Collection接口:

Collection的常见方法:

1,添加。
boolean add(Object obj):
boolean addAll(Collection coll):

2,删除。
boolean remove(object obj):
boolean removeAll(Collection coll);
void clear();

3,判断:
boolean contains(object obj):
boolean containsAll(Colllection coll);
boolean isEmpty():判断集合中是否有元素。 

4,获取:
int size():
Iterator iterator():取出元素的方式:迭代器。
该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。
所以该迭代器对象是在容器中进行内部实现的。
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,
也就是iterator方法。

Iterator接口就是对所有的Collection容器进行元素取出的公共接口。
其实就是抓娃娃游戏机中的夹子!

5,其他:
boolean retainAll(Collection coll);取交集。
Object[] toArray():将集合转成数组。

-------------------------------
Collection
|--List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
|--Set:元素不能重复,无序。

List:特有的常见方法:有一个共性特点就是都可以操作角标。
1,添加
void add(index,element);
void add(index,collection);
2,删除;
Object remove(index):
3,修改:
Object set(index,element);
4,获取:
Object get(index);
int indexOf(object);
int lastIndexOf(object);
List subList(from,to);
list集合是可以完成对元素的增删改查。

List:
|--Vector:内部是数组数据结构,是同步的。增删,查询都很慢!
|--ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
|--LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。

Set:元素不可以重复,是无序。
Set接口中的方法和Collection一致。
HashSet: 内部数据结构是哈希表 ,是不同步的。

如何保证该集合的元素唯一性呢?
是通过对象的hashCode和equals方法来完成对象唯一性的。
如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。 
如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。

记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。
一般情况下,如果定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。
建立对象判断是否相同的依据。

public class HashSetDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub

HashSet<Person> hs = new HashSet<Person>();
hs.add(new Person("张三",20));
hs.add(new Person("李四",22));
hs.add(new Person("王五",18));
hs.add(new Person("张三",20));

for(Person p : hs)
{
System.out.println(p.getName()+"="+p.getAge());
}
}
}
打印结果;
李四=22
张三=20
王五=18
张三=20
为什么有两个张三呢,不是说set集合中的元素不能重复吗,这就是因为,在Person类中没有覆
盖hashCode方法和equals方法。
当在Person类中覆盖hashCode方法和equals方法后,代码如下:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
再打印的结果:
张三=20
王五=18
李四=22

TreeSet:可以对Set集合中的元素进行排序。是不同步的。 
判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。 

TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,元就需要实现Comparable接口。覆盖compareTo方法。

如果不要按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序。怎么办?
可以使用TreeSet集合第二种排序方式二:
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。
将该类对象作为参数传递给TreeSet集合的构造函数。


---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com
基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip 【备注】 1、该资源内项目代码百分百可运行,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值