#Java面向对象8(java集合框架)
###java集合类概述
Java SE包含了由一组类和接口组成的Java集合框架,其主要功能是用来将存储的数据以某种组织,并以特定的方式来访问这些数据。
##List接口
List中的元素是有序的。
List通常允许重复元素。
List的实现类通常支持null元素。
可以通过索引访问List对象容器中的元素。
###ArrayList(可拓容数数组)
ArraryList在概念上与数组类似,表示一组编入索引的元素,区别之处在于ArrayList没有预先确定的大小,其长度可按需增大。
public class listTest1 {
public static void main(String[] args) {
List a1=new ArrayList<>();
a1.add("hello");
a1.add(2);
a1.add(1);
System.out.println(a1);
}
}
###泛型
强制规定集合里的元素类型
public class listTest1 {
public static void main(String[] args) {
ArrayList<String> a1=new ArrayList<>();
a1.add("hello");
a1.add("sodeshine");
a1.add("hsuhoo");
System.out.println(a1);
}
}
###LinkedList
public class LinkedListTest {
public static void main(String[] args) {
LinkedList<String> a1=new LinkedList<>();
a1.add("hello");
a1.add("konniqiwa");
a1.add("你好");
a1.add("bounjor");
//a1.removeFirst();
//a1.removeLast();
//a1.remove("bounjor");
//a1.set(2, "哎哟");
a1.pop();
//a1.push("hello");
System.out.println(a1);
}
}
LinkedList与ArrayList的选择
ArrayList采用数组的方式储存对象,这种方式将对象放在连续的位置中,它有一个很大的缺点就是对他们进行删除或插入操作的时候非常麻烦。例如,如果我们要删除列表中某个元素,那么这个元素之后的的其他元素都必须向前挪动。而插入元素的时候,在插入位置之后的所有元素都必须向后挪动。
###set接口
Set类型容器中不能包含重复元素。
元素可能有顺序,也可能没有顺序。
因为元素可能没有顺序,所以不能基于索引。
###HashSet
HashSet类是基于哈希算法的Set接口实现:
当遍历HashSet时,其中的元素是没有顺序的。
HashSet中不允许出现重复元素。
允许包含null元素。
###TreeSet
TreeSet按字典顺序排列
##Map接口
Map接口是Java集合框中不同于Collection接口的另一个重要接口,它对应的是一种从键(key)到值(Value)的对应关系的集合。
###HashMap类
>HashMap是基于哈希算法的Map接口的实现。
public class HashMapDemo{
public static void main(String[]args){
Map<String,String>map=new HashMap<String,String>();
map.put("a1","xiao");
map.put("b2","xiao1");
map.remove("a1");//删除
}
}
###Iterator
Iterator接口是一种用于遍历集合的接口。所谓遍历,是指从集合中取出每一个元素的过程。
#Java面向对象9(javaIO 2017.1.4)
##1.流的分类
输入流、输出流
节点流、处理流
字节流(8位):传输字节或者二进制类文件;字符流(16位):传输字符、文本等文件。
字符流(Reader Writer)
字符的处理,一次处理一个字符(unicode 编码)
2) 字符的底层仍然是基本的字节流
3) 字符流的基本实现
InputStreamReader 完成 byte 流解析为 char 流, 按照编码解析
OutputStreamWriter 提供 char 流到 byte 流, 按照编码处理
主要使用它们两个FileReader FileWriter
Reader类中两个常用类:
FileReader:以字符流的形式读取文件,与FileInputStream用法基本一致。
BufferedReader:将流读入缓冲区,然后从缓冲区读取,并且提供了readLine()方法,可以从文本文件中整行的读取数据。
Writer类中两个常用类:
FileWriter:以字符流的形式写入文件,与FileOutputStream用法基本一致。
BufferedWriter:将缓冲区输出到流。
它和字节流的区别:
InputStream和OutputStream主要用来处理可以被直接读作bytes的数字。
Reader和Writer用来处理文本。
##2.文件夹、文件的生成、过滤、输出
File f = new File(".");
System.out.println(f.getCanonicalPath());
File d = new File(f,"wenjianjia");
if (!d.exists()){
d.mkdir();
}
File e = new File(d,"wenjian.java");
if (!e.exists()){
e.createNewFile();
}
File e1 = new File(d,"wen.txt");
if (!e1.exists()){
e1.createNewFile();
}
File [] f1 = d.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
// TODO Auto-generated method stub
return pathname.getName().endsWith(".txt")&&pathname.isFile();
}
});
System.out.println(Arrays.toString(f1));
##3.文件的读取
FileInputStream f = new FileInputStream(new File("d:/one.txt"));
byte [] b = new byte[1024];
int n = 0;
while((n=f.read(b))!= -1){
System.out.println(new String(b));
f.close();
##4.复制文件
###a.节点流
FileInputStream fis = null;
FileOutputStream fos;
try {
fis = new FileInputStream("D:/one.txt");
fos = new FileOutputStream("E:/two.txt");
int n=0;
while((n=fis.read())!= -1){
fos.write(n);
fis.close();
###b.处理流
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
bis = new BufferedInputStream(new FileInputStream("D:/one.txt"));
bos = new BufferedOutputStream(new FileOutputStream("E:/three.txt"));
int n = 0;
while((n=bis.read())!= -1){
bos.write(n);
}
bis.close();
bos.close();
##5.写文件、读取文件
File f = new File("D:/one.txt");
try {
FileWriter fw = new FileWriter(f);
String s = "床前明月光";
fw.write(s);
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//读取文件
try {
BufferedReader br = new BufferedReader(new FileReader(f));
String line = br.readLine();
System.out.println(line);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
FileReader fr = new FileReader(f);
int n=0;
while((n=fr.read())!= -1){
System.out.print((char)n);
}
##6.对象序列化
简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
什么情况下需要序列化
a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
对象序列化,就是将 Object 转换为 byte 序列,反之叫对象的反序列化。
1) 序列化流(ObjectOutputStream), 是过滤流
ObjectOutputStream writeObject(Object) 序列化对象
ObjectInputStream readObject() 对象的反序列化
2)序列化接口(Serializable)
对象必须实现“序列化接口”才能进行序列化,否则将出现不能序列化的异常!
Serializable 是一个空的接口,没有任何方法,仅作为序列化的一个标识
Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。
public class Student implements Serializable{
String name;
int age;
}
/**对象序列化,把信息存储在外部
* */
Student stu = new Student();
stu.name = "libing";
stu.age = 18;
File f = new File("D:/one.txt");
try {
FileOutputStream fos = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(stu);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
FileInputStream fis = new FileInputStream(f);
ObjectInputStream ois = new ObjectInputStream(fis);
Student s = (Student) ois.readObject();
System.out.println(s);
#数据库基础(2017.1.5)
##1.关系型数据库简介以及简单指令
关系模型:世界是由实体和联系构成的
关系型数据库三种关系:一对一、一对多、多对多
命令行指令:登录:mysql -u -p
启动:net start mysql
关闭:net stop mysql
查看服务:services.msc
##2.基础sql指令集
sql:结构化查询语言
显示库:show databases;
建库:create database 库名;
进库:use 库名;
建表、列:create table 表名(列名,数据类型);
显示表:show tables;
增加列:alter table 表名 add 列名 数据类型;
修改列:alter table 表名 change 列名 修改后列名 数据类型;
删除列:alter table 表名 drop column 列名;
新建索引:create index 索引名 on 表名 (列名);
删除索引:alter table 表名 drop index 索引名;
##3.数据完整性
数据完整性=可靠性+准确性
数据完整性:实体完整性、域完整性、引用完整性、自定义完整性
###3.1实体完整性(保证行数据有效)
####3.1.1主键约束、主键自增
主键特点:唯一、非空
create table 表名 (列名 数据类型 primary key auto_increment);
####3.1.2唯一约束
unique
###3.2域完整性(保证列数据有效)
####3.2.1
默认值:default ‘默认值‘
####3.2.2
非空:not null
####3.2.3
check约束:check(列名=值 or 列名=值);
mysql中可以写,但不生效。
###3.3引用完整性
外键约束:外键必须连接主表主键,外键与主键数据类型必须相同,外键必须写在从表中。
constraint FK_本表名_本列名 foreign key (本列名) references 表名(列名);
###3.4自定义完整性
例如:使用自动编号
alter table 表名 auto_increment=100;
##4.删除
删除主键:alter table 表名 drop primary key;
删除外键:alter table 表名 drop foreign key 外键名(若无,自动生成);
##5.常用数据类型
数值型:smallint,int,bigint;float,double,decimal(m,d)
字符串型:char(指定长度),varchar(小于等于指定长度)
布尔型:boolean
日期型:date(年月日),datetime(年月日时分秒)
#数据库基础2(2017.1.6)
##1.增删改数据
###1.1增加数据
insert into 表名 (列名,列名) values (值,值);
插入全部列:insert into 表名 values (值...);
插入一个值时用value,插入多行数据时用多个括号,中间用逗号分隔。
插值时自增长的列需赋值null:insert into 表名 (列名,列名) values (null,值)。
复制表格内容:insert into 表名 select 列名 from 表名;
###1.2更改数据
UPDATE 表名 set 列值 = ‘值‘,列值=值 where 列值 =值;
例如:UPDATE stu set name = ‘ww‘,age=56 where id =48;
若要删除某一列,则设置为null。
###1.3删除行数据
delete from 表名 where 列名=值;
例如:delete from stu where id = 48;
###1.4初始化表格
truncate table 表名;
初始化即“恢复出厂设置”,删除所有内容。
##2.查询数据
###2.1投影
select 列名,列名 from 表名;
全部投影:select * from 表名;
起别名:SELECT i.age,i.id from stu i;
更改结果中列名:SELECT i.age as 年龄,i.id as 编码 from stu i;
结果中列值可以运算:SELECT i.age 年龄,i.id*2 编码 from stu i;
拼接:SELECT concat(i.age,i.id*2) from stu i;
SELECT concat(i.age,‘@‘,i.id*2) from stu i;
去重:SELECT distinct 列名1,列名2 from 表名;(只对列名1有效!)
分页:起始行为0,优势:控制显示数据、优化代码。
SELECT 列名 from 表名 LIMIT 起始行,显示行数;
SELECT age,id from stu LIMIT 1,1;
###2.2选择
SELECT age from stu where id BETWEEN 2 and 3;
BETWEEN关键字查询结果包含两个边界值。
SELECT age from stu where id in (2,3,4);
SELECT age from stu where id not in (2,3,4);
SELECT age from stu where name LIKE ‘%ds%‘;
‘%‘表示有若干字符或者没有字符。
SELECT name from stu where name LIKE ‘___‘;
‘_‘表示一个字符。
SELECT id from stu where age is null;
SELECT id from stu where age is not null;
注意null和‘ ‘代表不同的含义。
###2.3.排序
SELECT name from stu ORDER BY id;
SELECT name from stu ORDER BY id DESC;(降序)
##3.聚合函数
SELECT sum(grade) from emp;
SELECT avg(grade) from emp;
SELECT max(grade) from emp;
SELECT min(grade) from emp;
SELECT count(grade) from emp;
SELECT COUNT(sal) from emp;
SELECT COUNT(*),deptNo from emp GROUP BY deptNo;
SELECT COUNT(*),deptNo from emp GROUP BY deptNo HAVING COUNT(*)>4;
SELECT COUNT(*),deptNo,job from emp GROUP BY deptNo,job;
注意:分组之前使用while关键字,分组之后使用having关键字。
语句执行顺序:from-where-group by-select-having-order by
原文:http://www.cnblogs.com/liaoxr/p/6263132.html