小编Rae*_*ald的帖子

结构数组中的内存对齐

我有一个结构数组定义如下:

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字节边界上对齐.机器可能没有内存孔来满足此内存要求.

c memory arrays structure alignment

4
推荐指数
1
解决办法
3912
查看次数

hashcode的默认实现为以相同方式构造的对象返回不同的值

我在这里写一个示例代码:

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

4
推荐指数
1
解决办法
2375
查看次数

通过{}&[]拆分字符串

我是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],...}格式.我想要获取所有内容,但方括号中的内容将被表示为一个元素(如数组).

java regex string split

4
推荐指数
1
解决办法
218
查看次数

泛型集合"无法实例化类型ArrayList <?extends OpDTO>"

根据我所读到的,我认为这不可能,但我想确定.我有一个班级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)

java generics

4
推荐指数
1
解决办法
5851
查看次数

如何定义一个类并将其实例创建为一个构造

我想减少以下代码行.没有必要声明该类,然后创建它的实例以使run方法运行.应该可以编写代码,以便您可以定义类并将其实例创建为一个构造.我仍然需要runOnUiThread来实际运行它,但我正在寻找一种简洁的方法来组合类定义和实例化.我已经看到它在某个地方完成,但不记得它是如何完成的:

class OnRunnableCompleted implements Runnable
{
  @Override
  public void run()
  {
  }
}

OnRunnableCompleted onRunnableCompleted = new OnRunnableCompleted();
runOnUiThread(onRunnableCompleted);
Run Code Online (Sandbox Code Playgroud)

java

4
推荐指数
1
解决办法
119
查看次数

没有它的代码需要"同步"才能正常工作

这是来自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)

java multithreading synchronization

4
推荐指数
1
解决办法
171
查看次数

整数过大

嗨,我很难理解为什么这不起作用

if(Long.parseLong(morse) == 4545454545){
     System.out.println("2");
}
Run Code Online (Sandbox Code Playgroud)

莫尔斯只是一串数字.问题是它说Integer数字太大了:4545454545,但我确定Long可以比这长得多.

java

4
推荐指数
1
解决办法
1万
查看次数

如何打印对象的内容

当我启动我的程序时,它会给我一个对象的链接,而我想获取内容.哪里是我的错?

我认为问题在于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)

java

4
推荐指数
1
解决办法
127
查看次数

Cassandra是否提供物化视图

我刚刚开始使用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中的表中存储查询?

谢谢

materialized-views cassandra

4
推荐指数
1
解决办法
3239
查看次数

正确的 API 方法可延长处理时间

我正在制作一个主要由数据库提供的 HTTP Web API。简单来说,数据库包含用户对象。
这些对象有一个last_online(当用户在线时)和last_checked(我上次检查用户对象时)。

检查用户对象可能需要 3 到 30 秒的时间。当last_checked时间少于10分钟时一切正常;API 调用返回200和用户对象。

但我想当数据超过 10 分钟时重新处理用户对象。显然我不能让我的 API 返回坐在那里等待。

对于(有时)需要从长时间运行的进程返回数据的 HTTP API,正确的方法是什么?

http

4
推荐指数
1
解决办法
3171
查看次数