我有一个结构数组定义如下:
struct {
int x;
char y;
} arr[10];
我机器上int的大小是4个字节,char是1个字节.我知道结构将在内部填充,即数组的每个元素将具有8个字节的大小.但我想知道是否
1)这是因为下一个数组元素中的int类型成员的对齐要求
2)是因为每个结构本身应该在8字节边界上对齐,因为结构类型变量需要自然对齐.
为了使我的观点更清楚,应该是第一个数组成员的起始地址?如果它是一个8字节对齐的地址,如第二种情况所指出的那样,这可能是一个问题,同时定义大的2-D数组,如:
int arr [1000] [1000];
这里,2-D阵列的每个元素(即每个1-D阵列)应该在4000字节边界上对齐.机器可能没有内存孔来满足此内存要求.
我在这里写一个示例代码:
public class Test {
private int i;
private int j;
public Test() {
// TODO Auto-generated constructor stub
}
public Test(int i, int j)
{
this.i=i;
this.j=j;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我正在创建两个对象:
Test t1= new Test(4,5);
Test t2 = new Test(4,5);
Run Code Online (Sandbox Code Playgroud)
但是当我打印t1.hashcode()和t2.hashcode()时,它们会给出不同的值.但是根据java的一般联系,他们应该返回相同的值.事实上,当我使用String或Integer做同样的事情时,他们返回相同的hashcode().任何人都可以解释为什么哈希码对于t1和t2对象是不同的?
我是Java的新手.我想知道是否有一种更简单有效的方法来实现以下Splitting of String.我尝试过模式和匹配器,但并没有真正按照我想要的方式出现.
"{1,24,5,[8,5,9],7,[0,1]}"
Run Code Online (Sandbox Code Playgroud)
被分成:
1
24
5
[8,5,9]
7
[0,1]
Run Code Online (Sandbox Code Playgroud)
这是一个完全错误的代码,但我仍然发布它:
String str = "{1,24,5,[8,5,9],7,[0,1]}";
str= str.replaceAll("\\{", "");
str= str.replaceAll("}", "");
Pattern pattern = Pattern.compile("\\[(.*?)\\]");
Matcher matcher = pattern.matcher(str);
String[] test = new String[10];
// String[] _test = new String[10];
int i = 0;
String[] split = str.split(",");
while (matcher.find()) {
test[i] = matcher.group(0);
String[] split1 = matcher.group(0).split(",");
// System.out.println(split1[i]);
for (int j = 0; j < split.length; j++) {
if(!split[j].equals(test[j])&&((!split[j].contains("\\["))||!split[j].contains("\\]"))){
System.out.println(split[j]);
}
}
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
使用给定的String格式,可以说{a,b,[c,d,e],...}格式.我想要获取所有内容,但方括号中的内容将被表示为一个元素(如数组).
根据我所读到的,我认为这不可能,但我想确定.我有一个班级OpDTO和其他几个*DTO extends OpDTO.然后,我想要一个方法从这些子DTO的列表中提取某些元素,并将提取的元素返回到另一个列表中:
public List<? extends OpDTO> getLastOp (List<? extends OpDTO> listDTOs) {
List<? extends OpDTO> last = new ArrayList<? extends OpDTO>(); //compile error: Cannot instantiate the type ArrayList<? extends OpDTO>
//processing
return last;
}
Run Code Online (Sandbox Code Playgroud)
我希望ult成为与元素相同类型的元素列表listDTOs,并且只使用OpDTO的方法,但它会产生编译错误:
无法实例化该类型
ArrayList<? extends OpDTO>
我也尝试过这样的事情:
public <T> List<T> getLastOp (List<T> listDTOs) {
List<T> last = new ArrayList<T>();
//processing
return last;
}
Run Code Online (Sandbox Code Playgroud)
但是后来我不能强制listDTOs中的元素成为OpDTO的子类,并且无法实例化T.任何想法?
编辑
我也发生了将类型作为参数传递,然后我可以实例化它.这样可以,还是某种不好的做法?
private <T extends OpDTO> List<T> getLastOp (List<T> listDTOs, Class<? extends OpDTO> clazz) …Run Code Online (Sandbox Code Playgroud) 我想减少以下代码行.没有必要声明该类,然后创建它的实例以使run方法运行.应该可以编写代码,以便您可以定义类并将其实例创建为一个构造.我仍然需要runOnUiThread来实际运行它,但我正在寻找一种简洁的方法来组合类定义和实例化.我已经看到它在某个地方完成,但不记得它是如何完成的:
class OnRunnableCompleted implements Runnable
{
@Override
public void run()
{
}
}
OnRunnableCompleted onRunnableCompleted = new OnRunnableCompleted();
runOnUiThread(onRunnableCompleted);
Run Code Online (Sandbox Code Playgroud) 这是来自Herbert Schildt的Java Fundamentals的程序,用于演示同步.该方法sumArray(int[])是synchronized,并且这是程序正常工作的要求.但是,当我synchronized意外删除关键字时,程序显示几乎相同的输出,仍然给出了正确的结果.这是该计划.
class SumArray {
private int sum;
int sumArray(int[] nums) {
sum = 0; // Reset sum.
for(int i = 0; i < nums.length; i++) {
sum += nums[i];
System.out.println("Running total for " + Thread.currentThread().getName() + " is " + sum);
}
return sum;
}
}
class SumThread implements Runnable {
static SumArray sa = new SumArray();
Thread thrd;
int[] a;
int answer;
public SumThread(String name, int[] nums) {
thrd = new …Run Code Online (Sandbox Code Playgroud) 嗨,我很难理解为什么这不起作用
if(Long.parseLong(morse) == 4545454545){
System.out.println("2");
}
Run Code Online (Sandbox Code Playgroud)
莫尔斯只是一串数字.问题是它说Integer数字太大了:4545454545,但我确定Long可以比这长得多.
当我启动我的程序时,它会给我一个对象的链接,而我想获取内容.哪里是我的错?
我认为问题在于storage.addRecord(record)中ReaderXls.class.
结果:
Reading is over
Start reading from Storage
work2obj.Record@2910d926
Run Code Online (Sandbox Code Playgroud)
.
public class Start {
public static void main(String[] args) {
System.out.println("Start reading from Xls");
ReaderXls read = new ReaderXls();
Storage storage;
storage = read.ReadXls("Text1obj",0,1);
System.out.println("Reading is over");
System.out.println("Start reading from Storage");
System.out.println(storage.getRecord(1));
}
}
Run Code Online (Sandbox Code Playgroud)
.
public class Storage
{
List<Record> record;
public Storage(){
this.record = new ArrayList<Record>();
}
Run Code Online (Sandbox Code Playgroud)
.
public Record getRecord(int number){
return this.record.get(number);
}
}
Run Code Online (Sandbox Code Playgroud)
.
public class ReaderXls {
public Storage …Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用Cassandra DB.我想在Cassandra上创建物化视图(以存储查询)但是,在谷歌搜索后,我还没有找到任何关于它的信息.也许在Cassandra中不允许这样做?
那么,可以使用以下语句创建关系数据库(例如Oracle)中的物化视图:
CREATE MATERIALIZED VIEW table_mv
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS SELECT * FROM tabla;
Run Code Online (Sandbox Code Playgroud)
Cassandra CQL中是否存在类似的东西?或者,如何在Cassandra CQL中的表中存储查询?
谢谢
我正在制作一个主要由数据库提供的 HTTP Web API。简单来说,数据库包含用户对象。
这些对象有一个last_online(当用户在线时)和last_checked(我上次检查用户对象时)。
检查用户对象可能需要 3 到 30 秒的时间。当last_checked时间少于10分钟时一切正常;API 调用返回200和用户对象。
但我想当数据超过 10 分钟时重新处理用户对象。显然我不能让我的 API 返回坐在那里等待。
对于(有时)需要从长时间运行的进程返回数据的 HTTP API,正确的方法是什么?